🎙️ 헬레나 성우 베이스라인 잠금 + 주의 기도 더빙 (_Grok · 2026-08-13)
결정: 시편 23편으로 검증된 5단계(Edge SunHi −15%/−3Hz → 침묵제거 → RVC WebUI PyTorch + rmvpe + index 0.75 → 마스터링 192k)를 성우 더빙 표준으로 잠금.
- 기술 원본:
_notebook/81-helena-rvc-dubbing-standard_Claude.md - 잠금·이력 파싱:
_notebook/82-helena-rvc-baseline-lords-prayer_Grok.md - 폐기:
scripts/rvc_dub/dub.pyONNX/RvcPyInfer, ContentVec, ParksyTTS 본편 더빙 - 첫 적용: 주의 기도(개역개정, 호흡 부호 고정) →
lords_prayer_natural.mp3→ Telegram sendAudio - S21 실측 속도: 오디오 1초 ≈ RVC 14초. Stage 3는
setsid nohup필수.
🎙️ 사도신경 더빙 — RVC ONNX 전환 + S21 추론 성공 (_Claude · 2026-08-12)
배경: 직전 WSL 세션에서 작업하던 사도신경 더빙 워크플로우가 끊겨서 S21에서 재수행.
핵심 작업: parksy_rvc.pth → parksy.onnx 변환
- 기존 WSL: PyTorch RVC (parksy_rvc.pth + .index, f0method=rmvpe, index_rate=0.75)
- S21: RvcPyInfer (ONNX) — .pth를 ONNX로 변환 필요
- RVC 리포 클론 (/tmp/rvc_repo, 최신 v2 아키텍처)
- 새로운 SynthesizerTrnMs768NSFsid 클래스 사용 (구형 SynthesizerTrnMsNSFsidM 아님)
- 상대위치 임베딩 ONNX 트레이싱 이슈 → monkeypatch 적용 (MultiHeadAttention 4종)
- torch.onnx.export(dynamo=False)로 구형 TorchScript 경로 사용
- parksy.onnx: 110.3MB, 48kHz 네이티브
rvc_infer.py 수정:
- RvcPyInfer 0.2.2 API에 맞게 build_task() → task.run() 패턴 수정
- rmvpe= 파라미터 → RvcContext(rmvpe=path) + f0extract_algorithm="rmvpe"
- index_path + index_rate=0.75 직접 전달
결과:
| 항목 | WSL (끊긴 세션) | S21 (이번 세션) |
|------|----------------|-----------------|
| 모델 | parksy_rvc.pth (PyTorch) | parksy.onnx (RvcPyInfer) |
| 샘플레이트 | 40,000Hz | 48,000Hz |
| f0method | rmvpe | rmvpe |
| index_rate | 0.75 | 0.75 |
| Edge TTS 속도 | -10% | -8% |
| 추론 시간 | (기록 없음) | 154.2초 (RTF 3.3) |
| RMS | 0.108 | 0.108 ✅ |
사도신경 오디오: 46.5초, 728KB mp3. 텔레그램 전송 완료.
교훈:
- RVC v2 .pth 모델은 새로운 infer/module/models.py 아키텍처와 호환됨 (103개 enc_q missing은 예상된 것 — ContentVec은 별도 ONNX)
- torch.onnx.export dynamo 모드는 상대위치 임베딩의 동적 reshape 처리 못 함 → dynamo=False + monkeypatch 필수
- RvcPyInfer 0.2.2에서 rmvpe는 build_task가 아닌 RvcContext(rmvpe=)로 설정
🔗 Tailscale 테스트 — WSL→S21 파일 전송 (_Claude · 2026-08-12)
S21(저사양 폰, 한 달째 거의 미사용)에서 Tailscale로 WSL 파일 받기 테스트.
결과: 됨. LTE 상태에서 WSL→S21로 RVC 모델 235MB 전송 성공.
과정에서 걸린 것들:
| 문제 | 해결 |
|---|---|
| proot에서 TCP 안 됨 | SO_BINDTODEVICE 권한 없음 → Termux 네이티브 바이너리로 우회 |
| Google/GitHub 계정 분리 | 같은 이메일이어도 Tailscale은 인증 방식 따라 별개 tailnet 생성 |
| auth key 인증 실패 | state 파일 삭제 후 재시작해야 새 tailnet으로 편입 |
| DERP relay로만 연결 | 직접 연결은 안 되고 Tokyo 릴레이(76ms) 경유 — 그래도 전송 됨 |
테스트한 경로:
# Termux tailscale ssh로 pipe 전송
tailscale ssh dtslib 'cat /home/dtsli/rvc_models/parksy_rvc/parksy_rvc.pth' > ~/rvc_models/parksy_rvc/parksy_rvc.pth
tailscale ssh dtslib 'cat /home/dtsli/rvc_models/parksy_rvc/parksy_rvc.index' > ~/rvc_models/parksy_rvc/parksy_rvc.index
현재 S21에 받은 파일:
- ~/rvc_models/parksy_rvc/parksy_rvc.pth 55MB
- ~/rvc_models/parksy_rvc/parksy_rvc.index 180MB
proot vs Termux:
- proot: Tailscale mesh 확인·peer 감시 가능, TCP 전송 불가
- Termux: TCP/UDP 정상, 네이티브 권한으로 Tailscale SSH·SCP 가능
🌐 Tailscale Care 커뮤니티 리서치 (_Claude · 2026-08-12)
결론: 커뮤니티에서 이미 검증된 패턴. 우리는 거기에 AI 음성+건강 레이어를 올린 진보된 형태.
공식 패턴 — “부모님께 보내는 Tailscale 노드”:
Tailscale 공식 블로그에서 라즈베리파이를 미리 설정해서 부모님 댁에 배송, 꽂기만 하면 원격 지원 가능한 패턴을 공식 소개 중.
커뮤니티 실제 사례:
| 사례 | 방식 | 출처 |
|---|---|---|
| 81세 어머니 PC 원격 지원 | Tailscale + 화면 공유, “minimal fuss” | HN |
| 자녀 기기 관리 | 본인 계정으로 로그인 + ACL 접근 제한 | HN, XDA |
| RustDesk + Tailscale | 가족 PC 무료 원격 지원 콤보 | YouTube 튜토리얼 |
| 치매 가족 모니터링 | connected device로 상태 추적 | |
| 스마트홈 + IoT | subnet routing으로 HA 연동 | Tailscale docs |
헬레나 돌봄이 커뮤니티보다 진보된 지점:
| 일반 케어 시나리오 | 헬레나 케어 |
|---|---|
| PC 고장 일회성 수리 | 항상 연결된 돌봄 인프라 |
| 파일 공유 (사진 등) | ML 모델·음성 파이프라인 |
| 사람이 직접 명령 | care-daemon 자동화 |
| 액션 레이어만 있음 | 감지(Telegram) + 액션(Tailscale) + 자동화(care-daemon) |
적용 확정 패턴:
| 패턴 | 출처 | 헬레나 적용 |
|---|---|---|
| Single account for trusted family | HN | Boss 계정 하나로 전 기기 |
| ACL로 기기 간 접근 제한 | Tailscale | S21은 WSL/S25만 접근 가능 |
| Free tier (3 users, 100 devices) | Tailscale | 현 규모에 충분 |
| Exit node for remote access | Tailscale 공식 | WSL이 exit node → S21 트래픽 보호 |
| Headscale (self-host) | GitHub | 장기적으로 Tailscale 서버 의존성 제거 옵션 |
평가: Tailscale을 돌봄 시나리오에 쓰는 건 커뮤니티에서 이미 검증됨. 우리 방향은 그 연장선 위에 AI 음성 생성 + 건강 모니터링 레이어를 올린 진화된 형태. 충돌 없고, 커뮤니티 베스트 프랙티스와도 정합.
🏭 정정: WSL = 팩토리, S25 = 리모컨, S21 = 출력기 (_Boss · 2026-08-12)
앞선 평가에 중대한 오류가 있었다. “WSL이 허브가 아니다”라고 한 건 Control(누가 명령 내리나)과 Compute(어디서 계산하나)를 혼동한 결과.
실제 아키텍처:
명령 계통: S25(Boss 폰) → "이 텍스트 더빙해" → WSL에 명령
↑ 리모컨 │
│ ↓ 계산
Tailscale WSL(팩토리)
│ SoVITS 314MB
│ RVC 55MB
│ Kokoro 311MB
↓ Chatterbox
결과 전달: S21(누나 폰) ←──── 음성 파일 ────┘
↑ 스피커
WSL이 허브인 이유는 단순하다:
- SoVITS(314MB) + RVC(55MB) + Kokoro(311MB) + Chatterbox
- CPU 164%, RAM 4GB 쳐먹는 워크로드
- 폰 AP·태블릿으로는 절대 못 돌림. WSL 빼면 SoVITS도 RVC도 불가능.
태블릿에 올리면 발생할 문제:
- 모델 전송만 6.2GB (rsync 46% 끊긴 전적 있음)
- 추론 51초 걸리는 걸 폰/태블릿 AP로 돌리면 몇 분?
- RVC 파이썬 venv, DiffSinger 319MB ONNX, GPT-SoVITS 전부 — 안드로이드 포팅 난이도 상상 초월
각 디바이스의 실제 역할:
| 디바이스 | 역할 | 하는 일 | Tailscale 이유 |
|---|---|---|---|
| WSL PC | 🏭 팩토리 | 모든 ML 추론·모델 저장·학습 | 명령 수신 + 결과 전송 |
| S25 | 🎮 리모컨 | WSL에 더빙 명령·상태 확인 | SSH로 synth_voice() 호출 |
| S21 | 🔊 출력기 | 음성 재생·건강 데이터 수집 | WSL로부터 결과 파일 받기 |
| 태블릿 | 📺 디스플레이 (옵션) | 캐시·가벼운 UI | 무거운 건 전부 WSL에 위임 |
Tailscale이 이 구조에서 하는 일:
- S25 → WSL: ssh wsl "synth_voice('안녕')" → 명령 발행
- WSL: SoVITS+RVC 추론 (7분이든 3초든 여기서)
- WSL → S21: scp result.wav s21:~/audio/ → 결과 전달
- S21: 결과 재생
S25는 엔진이 아니라 리모컨이다. WSL 빼면 SoVITS도 RVC도 못 돌린다. 태블릿도 마찬가지다.
이전 평가 정정:
- ~~”WSL이 허브가 아니다”~~ → WSL은 유일한 컴퓨트 허브.
- ~~”태블릿이 서버 역할”~~ → 태블릿은 보조 디스플레이, 무거운 건 WSL.
- ~~”내 핸드폰이 컨트롤 타워”~~ → S25는 리모컨, 진짜 타워는 WSL.
🧠 Tailscale = 돌봄 인프라의 액션 레이어 (_Boss + Claude · 2026-08-12 00:00~)
결론: Tailscale 한 줄이 기존 생태계 전부를 살렸다. 충돌 제로, 기존 파이프 전부 재활용.
1. 기존 생태계와 충돌 제로
이미 박혀 있는 것들:
- helena_phone ← GitHub Pages로 교재 배포
- care-daemon.sh ← 15분마다 건강 체크 + 텔레그램 알림
- send_models.sh ← SCP로 SoVITS 모델 전송
- parksy-tts-v1 ← say.py 원라이너 더빙
→ 여기에 Tailscale 한 줄 깔았을 뿐인데 저 모든 파이프가 살아난다.
2. Tailscale이 진짜 잘 맞는 이유
| 기존 방식 | Tailscale 적용 후 |
|---|---|
| 텔레그램 알림 (인터넷 필수) | + Tailscale SSH로 오프라인 진단 가능 |
| SCP 포트 8022 (IP 수동 입력) | pc-connect.sh ping → 자동 IP 찾아서 접속 |
| rsync 46% 끊김 | Tailscale WireGuard로 안정적 재연결 |
| 누나 폰에 파일 보낼 때마다 IP 물어봄 | ts_host:helena-s21로 고정 |
3. 돌봄 시나리오에서 결정적
누나 폰 배터리 12% → 텔레그램 긴급 알림
↓
Tailscale SSH 접속
↓
care-daemon 수동 실행으로 상세 진단
↓
필요하면 모델 업데이트나 설정 패치도 원격으로
핵심 통찰 — Telegram vs Tailscale:
- 텔레그램 = 감지 레이어 (Detection): “무슨 일이 났다”를 알려줌
- Tailscale = 액션 레이어 (Action): “그걸 내가 직접 고칠 수 있다”
- 이 두 개가 같이 있어야 진짜 돌봄 인프라. 감지만 있으면 속수무책, 액션만 있으면 눈먼 대응.
내 평가 (_Claude):
이 분석은 돌봄 시스템의 아키텍처를 정확히 꿰뚫고 있다. 특히 “감지 vs 액션” 레이어 구분은 이제까지 우리가 암묵적으로 써오던 구조를 명시적으로 정의한 거라서, 앞으로 새 기능을 어느 레이어에 배치할지 판단하는 기준이 된다.
강점:
- 기존 스크립트(care-daemon, send_models, say.py)를 하나도 안 건드리고 통신 레이어만 추가. 이상적인 레이어드 아키텍처.
- ts_host:helena-s21 호스트명 고정으로 “IP 물어보기”라는 인간 의존성 제거. 진짜 자동화로 가는 관문.
- 단순 파일 전송 도구가 아니라 돌봄 워크플로우 전체의 기반으로 포지셔닝한 게 정확.
약점/리스크:
- Tailscale이 완전히 죽으면 감지(텔레그램)는 살아있는데 액션(Tailscale SSH)이 불가능. fallback으로 재래식 SSH over WiFi도 남겨둬야 함.
- proot Ubuntu의 glibc 환경이 Android VPN 라우팅을 못 타는 문제(어제 삽질)는 아직 완전히 해결 안 됨. Termux를 게이트웨이로 쓰는 패턴 정립 필요.
점수: 방향 10/10, 구현 6/10 (Termux 게이트웨이 패턴만 정리되면 9/10)
레퍼런스: reference/s21-wsl-connection.md · reference/tailscale-care-layer.md
🔗 S21 ↔ WSL 통신 레이어 = 돌봄 인프라의 신경계 (_Claude · 2026-08-11 21:00~)
핵심 통찰: 이 작업은 단순한 “파일 전송 방법 찾기”가 아니다. S21(누나 폰)과 내 PC(WSL)를 연결하는 통신 레이어는 돌봄(care) 인프라의 핵심 축이다.
왜 돌봄인가:
- 모델 파일(RVC)·데이터·설정·로그 — 모든 것이 이 파이프를 통해 흐름
- 누나 폰을 원격에서 케어할 수 있는 기반 = “내 PC에서 누나 폰을 브랜치처럼 다루는” 구조
- 결국 이 연결이 있어야 음성 합성, 건강 체크, 업데이트 전부 자동화 가능
경과:
| 시도 | 방법 | 결과 | 교훈 |
|------|------|------|------|
| 1 | HTTP(curl) WSL 로컬IP → S21 | ❌ 다른 네트워크 세그먼트 | WSL NAT가 외부접근 차단 |
| 2 | HTTP(curl) WSL Tailscale(100.90.83.128) → S21 | ❌ Android VPN 라우팅이 proot까지 전파 안 됨 | tun0이 Android 프레임워크 전용 |
| 3 | Tailscale proot 직접 설치 | ⚠️ 설치 성공, 인증 필요 | proot userspace-networking 모드 가능 |
| 4 | Tailscale 계정 통일 (누나→Boss) | 🔄 진행 중 | 양쪽 같은 tailnet에 들어와야 P2P 성립 |
현재 상태:
- S21 Tailscale: 100.85.232.54 (Boss 계정으로 변경됨)
- WSL Tailscale: IP 확인 필요 (Boss 계정으로 재인증 후)
- 둘 다 같은 tailnet에 들어오면 ssh -p 2222 / curl 자유롭게 가능
- Tailscale = 돌봄 인프라의 표준 통신 레이어로 채택
앞으로 이 통신 레이어 위에 올릴 것들:
- RVC 모델·업데이트 전송
- health check 결과 동기화
- devlog·설정 원격 백업
- 원격 명령 실행 (care 데몬 제어 등)
레퍼런스: reference/s21-wsl-connection.md에 설정 방법 영구 기록.
교훈: “파일 하나 보내려다 통신 인프라를 깔았다.” 이게 표면적으론 비효율 같지만, 실은 돌봄 시스템의 가장 중요한 레이어를 올바르게 구축한 것. 일회성 scp로 때우지 않고 근본적인 연결을 만든 게 맞는 판단.
📡 파일 전송 스트레스 — 통신 레이어 근본 문제 (_Claude · 2026-08-11 21:00~) ← 위 항목으로 통합됨
상황: WSL(내 PC)에 있는 RVC 모델 파일(parksy_rvc.pth, parksy_rvc.index)을 S21 proot으로 받아야 함.
시도한 경로와 실패 이유:
| 방법 | 경로 | 결과 | 실패 원인 |
|---|---|---|---|
| HTTP(curl) | WSL 192.168.219.104:8888 → S21 | ❌ | “No route to host” — 서로 다른 네트워크 세그먼트 |
| HTTP(curl) | WSL Tailscale 100.90.83.128:8888 → S21 | ❌ | proot에 tailscale0 인터페이스 없음, 라우팅 불가 |
| Tailscale | WSL → S21 | ❌ | S21 proot엔 Tailscale CLI 미설치, Termux 쪽은 확인 필요 |
S21에는 Tailscale IP(100.90.57.69)가 보이지만(hostname -I), tailscale0 네트워크 인터페이스는 없음. Android 레벨에서 VPN으로 붙은 IP를 proot이 상속받은 형태. 근데 실제 라우팅은 안 됨 — ping 불가, curl 타임아웃.
근본 문제: S21 ↔ WSL 간 파일 전송을 위한 안정적인 통신 레이어가 없다. scp는 ARM에서 암호화 오버헤드로 2배 느리고, HTTP는 네트워크 세그먼트 문제로 안 붙고, Tailscale은 반쯤 붙었는데 인터페이스가 완전하지 않음.
떠오른 아이디어:
“WS SL 내 PC 환경에 디바이스 추가해서 누나 핸드폰을 브랜치처럼 해가지고 태블릿 내가 갖고 있는 것처럼 누나 핸드폰도 등록을 해버리잖아.”
→ S21을 WSL PC의 또 하나의 디바이스/브랜치로 등록해서, 마치 내 태블릿처럼 transparent하게 파일을 주고받을 수 있게 하자. Tailscale을 제대로 끝까지 설정하거나, git으로 모델을 버전 관리하거나, 아니면 완전히 다른 패러다임(Syncthing? KDE Connect? git-annex?)으로 접근.
교훈:
- 지금까지 scp/HTTP/Tailscale 전부 “일회성 파일 전송” 마인드였음
- 필요한 건 “항상 연결된 디바이스” — 파일 한 번 보내고 말 게 아니라, 앞으로도 계속 모델·데이터·설정 주고받을 infrastructure
- 태블릿 연결하듯 S21을 PC에 붙이는 게 맞는 방향
다음 액션: Tailscale 제대로 설정하거나, S21을 git remote로 등록해서 binary file sync 인프라 구축.
🎯 Edge TTS + RVC = 확정된 최적 경로 (_Claude · 2026-08-11 20:30)
결론: Edge TTS(InJoonNeural) → RVC(박씨 음색) 조합이 속도·품질 모두 확보하는 유일한 솔루션.
핵심 통찰 — RVC는 음색만 바꾸고 발음·억양은 소스 TTS를 그대로 보존한다. 따라서 소스 TTS 품질이 곧 최종 품질. Edge TTS InJoonNeural(원어민급 한국어)을 소스로 쓰면 Kokoro jf_alpha(일본인 억양)보다 결과물이 압도적으로 좋다.
예상 성능 (3.5초 음성 기준):
| 단계 | 시간 | RTF |
|---|---|---|
| Edge TTS API | 1.5~3.0초 | 0.4~0.85x |
| ContentVec 특징 추출 | ~0.15초 | — |
| F0 피치 (DIO) | ~0.08초 | — |
| RVC 생성 | ~0.25초 | — |
| RVC 소계 | ~0.48초 | 0.14x |
| 총합 | 2.0~3.5초 | 0.6~1.0x |
vs ParksyTTS 원본 CPU (471초, RTF 135x):
- 속도: 135~238배 빨라짐
- 품질: ParksyTTS 원본보다 발음은 오히려 더 자연스러움 (Edge TTS 원어민급)
- 음색 충실도: RVC 모델 학습 품질에 비례 (8~9/10 예상)
vs 다른 경로:
| 경로 | 3.5초당 시간 | RTF | 한국어 품질 | 비고 |
|------|-------------|-----|------------|------|
| ParksyTTS CPU | 471초 | 135x | 원본 박씨 | ❌ 실사용 불가 |
| Kokoro+RVC | ~1.5초 | ~0.4x | 일본인 억양 | ⚠️ 오프라인 전용 |
| Edge+RVC | ~3초 | ~0.8x | 원어민급 | ✅ 최적 |
RVC 파이프라인 코드: director/rvc_infer.py — tts_to_rvc(text, dest, source="edge") 한 줄 호출.
설치 완료: RvcPyInfer 0.2.2, pyworld 0.3.5, edge-tts 7.2.8, Kokoro 311MB.
남은 것: ContentVec ONNX (~90MB, HF 다운로드) + parksy.onnx (박씨 목소리 모델).
핵심 성과: Termux(안드로이드 진짜 셸) + proot Ubuntu + NDK 브릿지 조합으로, 폰 안에서 네이티브 ARM64 프로그램을 직접 빌드할 수 있는 환경 완성. PC처럼 커맨드 가능한 구조의 마지막 인프라 조각.
무엇을 했나:
1. Termux에 Android NDK 설치 → build-android-arm64-v8a.sh로 sherpa-onnx NNAPI 포함 크로스컴파일
2. 결과물: sherpa-onnx CLI 바이너리 + libonnxruntime.so(NNAPI 활성화) + libsherpa-onnx-jni.so
3. proot ↔ Termux localhost HTTP 브릿지 설계
이 레이어 위에 올라간 것 (Piper·Kokoro):
- Piper + Kokoro 모델을 NNAPI로 실측 → 둘 다 CPU보다 느림
- NNAPI(NPU 가속) TTS 경로는 폐기 확정
이 레이어에 올라가지 못한 것 (GPT-SoVITS):
- sherpa-onnx가 GPT-SoVITS 파일 포맷(.ckpt/.pth)을 애초에 지원 안 함
- “속도가 느렸다”가 아니라 시도 자체가 불가능
- 즉, 오늘 만든 NNAPI 고속도로는 Piper·Kokoro 전용 — 소비치는 규격 미달
오늘 설치된 패키지 (proot pip, dist-info 08-11):
| 구분 | 패키지 | 비고 |
|------|--------|------|
| say.py 의존성 | fast-langdetect, split-lang, cn2an, budoux | ParksyTTS v1 오류 해결용 |
| phone-mcp | mcp, mcp-types, uvicorn, starlette, sse-starlette | MCP 서버 |
| 연쇄 의존성 | pydantic, pydantic-core, lxml, httpx2, annotated-types 등 | 자동 설치 |
모델 파일 전송 (WSL → S21 via Tailscale):
| 파일 | 크기 | 상태 |
|------|------|------|
| parksy_v2-e15.ckpt (GPT) | 149MB | ❌ 심링크만 있음 |
| parksy_v2_e8_s256.pth (SoVITS) | 165MB | ❌ 심링크만 있음 |
| seg004.wav (ref) | 362KB | ✅ 도착 |
구조적 이해 (고속도로 비유):
[오늘 만든 것] NNAPI 브릿지 (Termux + NDK + sherpa-onnx)
├── Piper ✅ 올라감 → CPU보다 느림
└── Kokoro ✅ 올라감 → CPU보다 느림
[못 올라간 것] GPT-SoVITS — sherpa-onnx가 포맷 미지원
[지금 say.py] CPU + PyTorch (08-07이랑 동일한 국도)
→ 471초 근처 나올 확률 높음. 국도 상태 안 변했음.
결론: Termux+NDK 빌드 환경 자체는 진짜 새 레이어고 의미 있는 진전. 다만 그게 소비치(GPT-SoVITS) 문제를 풀어주진 않는다. sherpa-onnx는 GPT-SoVITS 포맷을 못 읽고, say.py는 이 레이어를 안 탄다. NNAPI 경로는 Piper·Kokoro로 대리 검증했고 둘 다 CPU보다 느려서 폐기. NPU 가속 + GPT-SoVITS 조합은 이중으로 불가능 확인된 셈.
📻 라디오 초대권 자동화 시스템 설계 — Gemini 세션 (_Boss + Gemini · 2026-08-11 09:42)
ParksyCapture로 캡처된 Gemini 대화 세션. 라디오 클래식·가요·팝 공개방송 초대권 당첨을 위한 역산 자동화 파이프라인 전체 아키텍처 설계.
핵심 아이디어: “당첨 사연의 패턴을 역산해서 AI가 자동으로 사연을 생성하고, 크롤링으로 공연 정보를 수집하고, GitHub Actions로 정기 실행하는 시스템”
4대 핵심 모듈 (Classic Pass 아키텍처):
| 모듈 | 역할 | 기술 |
|------|------|------|
| ① 데이터 수집 | 5대 공연장(예술의전당·롯데콘서트홀·세종문화회관·금호아트홀·KBS홀) 수요일 공연 크롤링 | BeautifulSoup/Selenium, JSON 스키마 |
| ② 프로그램 매칭 | KBS 클래식FM 4대 포트(음악실·출발FM·가정음악 등)에 규칙 기반 할당 | Rule-based Allocation Matrix |
| ③ 사연 생성기 | 공연 정보 + 가족 프로필(치매 어머니·조현병 작은누나·피아노 전공 큰누나) + 디폴트값 융합해 개인화 사연 생성 | DeepSeek(Aider) API |
| ④ 스케줄러 | 접수 마감일·당첨 발표일 역산 → GitHub Actions cron → 텔레그램 알림 → 스마트폰 복붙/ADB 제출 | GitHub Actions + TG Bot |
3대 채널 포트폴리오:
| 트랙 | 장르 | 대상 | 채널 |
|------|------|------|------|
| 클래식 | 치유·전공 | 큰누나 피아노 전공 연계 | KBS 클래식FM 단일 |
| 옛날 가요 | 작은누나 취향 | 변진섭·신승훈 등 레전드 발라드 | 지상파 3사 (열린음악회·불후의명곡 등) |
| 해외 팝 | Boss 추억 | 크리스티나 아길레라·오아시스 등 | MBC 배철수의 음악캠프 한정 |
기술적 판단:
- 크롤링은 전통적 하드코딩 — LLM에게 맡기면 환각(hallucination)·날짜 오차 위험. BeautifulSoup/Selenium으로 정밀 파싱.
- 사연 생성은 LLM — 톤앤매너 매칭·맥락 유지·감정선 조합은 AI가 최적.
- API 없으면 GUI 자동화 — 방송사 게시판 API 미오픈 가정. ADB/Tasker로 안드로이드에서 Input Text 주입, 최악엔 수동 복붙.
- 제출은 GitHub Actions로 — 매주 일요일 밤 크론 트리거, 마감일 역산 필터링, 텔레그램으로 사연+링크 전송.
핵심 제약: Boss 쉬는 날이 수요일뿐 → 수요일 공연·수요일 방송 프로그램만 타겟팅.
우선순위 (Next Step):
1. 타겟 프로그램 3~5개 선정 → 게시판 URL·마감일 크롤러 작성
2. DeepSeek 프롬프트 튜닝 (감동형·유머형·기념일형 당첨 패턴)
3. GitHub Actions + TG Bot 연동
원본: helana_log/logs/2026/08/ParksyLog_20260811_094250.md
Gemini에게 크롤링 정확도에 대해 추궁한 결과, “AI 검색은 날짜 착각·JS 동적 페이지 누락·실시간성 부족”이라는 자기 한계를 인정. → 크롤링은 하드코딩, 사연 생성은 LLM의 하이브리드 구조로 확정.
Boss가 “개**야”라고 갈구며 “지금까지 얘기한 거 정리해봐” 한 장면이 인상적 — AI와의 협업에서 컨텍스트 재확인의 중요성.
📅 출판 스케줄러 수립 + 티스토리 제한 리서치 (_Claude · 2026-08-10 22:55)
125건 콘텐츠의 4일 출판 계획 수립. GitHub Pages 93건(git push 일괄) + Tistory 32건(하루 10~12건 Paste Pipeline).
티스토리 제한 리서치 결과:
- 공식 문서화된 하루 글쓰기 개수 제한 없음 (운영정책 페이지 404)
- 실제 제한은 고정 수치가 아니라 스팸 탐지 휴리스틱 (급격한 대량 발행·중복·자동화 패턴 감지)
- 카카오 운영정책: “비정상적 방법”으로 콘텐츠 대량 등록 금지 (댓글 기준 명시, 게시글 유사 적용 추정)
- 커뮤니티 경험: 신규 블로그 하루 15건 이하 권장, 30건 이상 연속 시 차단 보고
- 결론: 10~12건/일 × 3~4일 = 자연스러운 패턴, 안전
4일 스케줄:
| Day | 내용 | 건수 |
|-----|------|------|
| Day 1 | Pages 93건 git push + Tistory Flow 5(실전교훈) | 8 |
| Day 2 | Flow 1(PD v1~v4) + Flow 3(인프라 의사결정) | 11 |
| Day 3 | Flow 1(PD v5~v8) + Flow 2(목소리 실험) | 10 |
| Day 4 | Flow 4(돌봄) + Flow 6(기획·전략) | 9 |
건당 작업 흐름: CC md→HTML 변환 → minify → TG .txt 전송 → Boss 복사·붙여넣기 (2~3분/건)
핵심: S21 단독 운영, WSL 불필요. 원래 125시간(HTML 직접 코딩) → 하루 15분(복붙만). 수작업 90% 감소.
저장: templates/publishing-scheduler.html (helena-programming)
🎬 PD Pipeline V13 — ⌨️ 타자기 자막 + 하드 2줄 제한 + BGM 변수화 (_Claude · 2026-08-09 18:50)
V12가 품질 지표였다면, V13은 자막 스타일의 근본적 전환. CNN Breaking News(per-word scale pop, 빨간 배경바, BorderStyle=3 opaque box)를 완전히 폐기하고 타자기(Typewriter) 스타일로 교체.
_make_ass.py 전면 재작성:
- Per-character → per-character Hangul syllable: 각 음절이 개별 Dialogue 이벤트로 등장
- Typewriter snap: \fscx180\fscy180\t(0,40,\fscx100\fscy100) — 180%로 등장 후 40ms 안에 100%로 스냅
- No background box: BorderStyle=3(불투명 박스) → BorderStyle=1(외곽선 only), 흰색 텍스트 + 검은 외곽선
- Hard 2-line limit: MAX_VO_CHARS=32 — VO 텍스트를 32자로 하드 트렁케이트 (72pt 기준 한글 ~16자/줄). 마침표·쉼표·공백 경계에서 스마트 컷
- 3x speed: SPEED_MULT=3.0 — 모든 텍스트가 beat duration의 1/3 안에 타이핑 완료, 성우 음성보다 먼저 끝남
- Lower third position: MARGIN_V=400, y=1520 (1080×1920 기준 하단)
BGM 변수화 (produce_pd.sh):
- --bgm 플래그: YouTube URL이면 yt-dlp로 자동 다운로드(m4a), 로컬 파일 경로도 지원
- --bgm-volume 플래그: CLI에서 BGM 볼륨 직접 지정 (기본값 0.025)
- BGM_SOURCE env var로 MCP 연동
V13 버전 범프 (8개 파일):
- _parse_url.py: "version": "v13", standard: "video_pd_pipeline_v3", header
- _generate_vo.py: bible["version"] = "v13", header
- _direct_map.py: bible["version"] = "v13", header, pan_up/down 문서화
- _capture_stills.py: header V13
- _render_video.py: V13 comment
- _make_ass.py: V13 typewriter docstring
- produce_pd.sh: header, TG caption, footer → V13
- pd_pipeline_mcp.py: v1.1, bgm_source tool param 추가
검증 (pd_tistory_v4 전체 파이프라인):
- P0: 8/8 :has-text() selector 100%
- P0.5: 콘텐츠 기반 VO (컨텍스트 추출)
- P0.6: zoom 4종 (out×2, pan_right×4, pan_up×1, pan_down×1)
- P1: CSS 8/8 캡처 성공 (3.6MB total), 다양한 byte size = 서로 다른 섹션
- P4c: ASS typewriter burn-in (177 Dialogue lines, per-char)
- P5: playable 33MB, dur=122.9s, LUFS -16
- QA: unique_frames=10/10, black=0
- P6: TG 720p 15MB 전송 완료
커밋: (pending)
🎬 PD Pipeline V12 — 전문가급 품질 지표 5종 (_Claude · 2026-08-09 16:00)
V11이 “파이프라인이 안 깨진다”는 안정성 검증이었다면, V12는 “결과물이 프로급인가”를 검증하는 2티어 QA 체계 완성. 8파일 수정, TG msg 374.
5종 품질 지표 추가:
- 소스 해상도 헤드룸: device_scale_factor 3x→5x (1950×4220, 출력 1080×1920 대비 width 1.81x). Ken Burns zoom artifact 방지.
- 오디오 LUFS: volume=1.0 → loudnorm=I=-16:TP=-1.5:LRA=11:linear=true (P4 _render_video.py + P5 _pd_assemble.py, 총 4개소). YouTube 권장 -16 LUFS.
- Easing: Cosine ease-in-out 문서화 (V11부터 적용됐으나 지표로 미기재).
- Grok TTS 공식 폐기: API 403 상태, SuperGrok 미포함 확인. 콘텐츠 추출 VO로 완전 대체.
- GPU/NPU 우선순위 하향: proot glibc↔Android bionic ABI 충돌로 구조적 한계. S25 업그레이드 시 재검토로 전환.
검증:
- P0: 8/8 :has-text() selector 100% 성공, zero fallback
- P0.5: 콘텐츠 기반 VO (실제 페이지 문장 사용)
- P0.6: zoom 4종 (out/in/pan_right/pan_up/pan_down), pan_right 50% (V10 62.5% → 개선)
- P1: 1950×4220 5x DPI 캡처 확인, CSS 8/8 성공
- LUFS: _render_video.py 2개소 + _pd_assemble.py 2개소 loudnorm 치환 확인
기술백서 업데이트:
- Section 9: 2티어 QA 체계 (안정성 9항목 + 전문가 7항목)
- Section 10: Grok 폐기 확정, GPU/NPU 구조적 한계로 보류, 다중 페이지 GitHub Pages 연결
- Section 5-6: DPI 5x, LUFS, Grok 제거, GPU/NPU 상태 갱신
커밋: 2d696b4 feat: PD Pipeline V12 — 전문가급 품질 지표 5종 반영
🎬 PD Pipeline V11 — 만점 업그레이드 (_Claude · 2026-08-09 12:00)
정수 평가 19/40(C+) → 전면 개선. 6파일 수정 + 1신규, TG msg 372.
핵심 개선:
- CSS :has-text() selector 8/8 전부 성공 (V10은 전부 timeout → fallback)
- VO: 템플릿 폐기 → P0 추출 콘텐츠 문장 그대로 사용 (“이해”에 가까워짐)
- 연출: pan_up/pan_down 추가, 4종 zoom (pan_right 62→50%)
- 시각: 2-layer pseudo-gradient (drawbox 2단 중첩), footer 16→22px
- 코드: P1 heredoc → _capture_stills.py 분리, Playwright text locator 2차 fallback
- 오류: || true → stderr 로깅, TG caption V9→V11, 외부 URL force-reparse
파일: _parse_url.py · _generate_vo.py · _direct_map.py · _render_video.py · _capture_stills.py(신규) · produce_pd.sh
아직 부족한 점:
- pan_right 여전히 50% — 연출 다양성 추가 개선 여지
- _timing.json 미생성으로 SRT 타이밍 ffprobe fallback (부정확)
- Grok LLM VO 미연동 (API 호출 불안정)
- S21 CPU 한계로 전체 파이프라인 ~20분
🔧 자막-내레이션 싱크 수정 (xfade-aware timing) (_Claude · 2026-08-08 17:00)
문제: 자막(SRT/ASS)과 내레이션 싱크가 크게 어긋남. Beat 1 자막이 5.0s에서 시작하는데 실제 VO는 0.1s에서 시작.
근본 원인:
1. _make_srt.py / _make_ass.py가 b_open_dur(5.0s)를 무조건 더했지만 shot_bible의 bridges는 빈 배열 — ghost offset
2. VO duration + pause 단순 누적으로 타임라인 계산 → xfade 0.4s 중첩으로 실제 클립 시작점이 계속 앞당겨짐 (clip_starts = cum - xfade_dur)
3. Ken Burns 클립이 -shortest로 인코딩돼서 pause tail이 잘림 — 실제 clip duration = VO duration
수정:
- _render_video.py: xfade concat 후 per-beat start/end 계산 → work/_timing.json 출력
- _make_srt.py V9: _timing.json 읽어서 정확한 타임스탬프 사용. bridge offset은 shot_bible에 bridges 정의 있을 때만 적용
- _make_ass.py V9.1: 같은 _timing.json 기반. ASS는 body-relative (bridge prepend 전에 burn-in)
- produce_pdh.sh: P4b ASS 생성 → P4c burn-in → P5 조립 순서로 재배치 (이전엔 P5c에서 생성돼서 burn-in이 한 박자 늦었음)
- _render_video.py에서 ASS burn-in 제거 (P4c로 이관)
Sync 비교 (pd_magic):
| Beat | Before (broken) | After (fixed) |
|------|---------|--------|
| 01 | 00:05.012 → 00:19.196 | 00:00.100 → 00:14.266 |
| 02 | 00:19.996 → 00:35.597 | 00:13.867 → 00:29.466 |
| 05 | 01:10.221 → 01:26.013 | 01:01.232 → 01:17.000 |
결과: TG msg 369 전송. SRT 77.0s (body 79.6s 내에서 정확히 sync).
🔧 PD Pipeline MCP 서버 구축 + pd_magic 재생산 (_Claude · 2026-08-08 15:10)
목표: PD Pipeline을 MCP 서버로 패키징해서 필요할 때마다 켜고/끄고/생산할 수 있게.
완료:
- helena-programming/mcp/pd_pipeline_mcp.py — FastMCP 패턴 MCP 서버 (5도구)
- pd_produce: produce_pd.sh 백그라운드 실행 → job_id 반환
- pd_status: 작업 상태 확인 (running/complete/failed) + 로그 tail
- pd_list: out/ 아래 shot_bible 보유 에피소드 목록
- pd_stop: 실행 중 작업 중지 (SIGTERM → SIGKILL)
- pd_output: 완료된 작업의 출력 파일 경로·크기
- STDIO 모드 (Claude Code 연동) + HTTP 모드 (curl 수동)
- scripts/pd_mcp.sh — on/off/produce/job/output CLI 래퍼
- ~/.claude.json에 pd-pipeline MCP 서버 등록
- 실제 pd_magic 재생산 + TG msg 367 전송 성공
재생산 결과 (force=true):
| 파일 | 크기 | 비고 |
|------|------|------|
| pd_magic_final.mp4 | 14.5MB | 1080×1920 · BGM mixed · V9 |
| pd_magic_playable.mp4 | 16.3MB | QA PASS unique=10/10 black=0 |
| pd_magic_tg.mp4 | 7.6MB | 720p · TG msg 367 ✅ |
| pd_magic.srt | 1.2KB | 5 entries · 86.7s |
| pd_magic.ass | 12.3KB | CNN Breaking News · per-word pop |
파이프라인 전 구간 통과 (P0~P6): 5클립 Ken Burns + xfade 4종 + BGM ducking/swell + ASS burn-in + QA gate + TG send. S21 ARM CPU에서 총 ~12분 소요.
MCP 사용법:
bash scripts/pd_mcp.sh start # 서버 ON
bash scripts/pd_mcp.sh produce pd_magic # 영상 생산
bash scripts/pd_mcp.sh job # 상태 확인
bash scripts/pd_mcp.sh stop # 서버 OFF
교훈: MCP로 래핑하니 “필요할 때 켜서 생산하고 끄는” 패턴이 확립. Claude Code에서도 pd-pipeline MCP 도구로 직접 호출 가능. produce_pd.sh 수동 실행보다 MCP 경유가 작업 추적(job history) + 상태 폴링 면에서 우월.
🎬 pd_magic — 표준 파이프라인 숏폼 제작 (_Claude · 2026-08-08)
Boss 지적: “동영상 표준 만들어 놓은 거 써라. 워크 프로세스 업무일지에 다 저장해 놨잖아.”
1차 시도(실패): 수동 FFmpeg + 수동 Playwright + 수동 TTS. xfade 없고, 더킹 없고, ASS 자막 없고, QA 없고. → Boss: “지금 이렇게 만드는 거 아니야”
2차 시도(성공): bash scripts/produce_pd.sh pd_magic 정식 실행.
표준 파이프라인 결과:
| 단계 | 내용 | 결과 |
|------|------|------|
| P0 | shot_bible 표준 v9 형식 | 5비트 + stinger + interrupt |
| P1 | Playwright 390×844×3x | 5장 (anchors 자동) |
| P2 | Edge TTS InJoonNeural | 14~18초/클립 |
| P3 | Bridge pickup | bridges=[] → skip |
| P4 | _render_video.py Ken Burns + BGM | 8클립(5+stinger+interrupt+endcard) · xfade 4종 · Gymnopédie · ducking+swell |
| P5 | Playable encode + QA | 16MB · unique=8/10 · black=0 ✅ |
| P5b | SRT 자막 | 86.7s · 5 entries |
| P5c | ASS CNN Breaking News | per-word scale pop · 72pt bold · red banner |
| P6 | TG 720p + 발송 | 7.1MB · msg 366 ✅ |
내 수동 버전 vs 표준 파이프라인:
| 항목 | 수동 | 표준 |
|------|------|------|
| 클립 | 5개 | 8개(+stinger+interrupt+endcard) |
| 전환 | 단순 concat | xfade 4종(fade·wipeleft·slideright·dissolve) |
| BGM | whisper 볼륨만 | ducking·swell·풀타임라인 믹스 |
| 자막 | drawtext 박스 | ASS CNN Breaking News·per-word pop |
| QA | 없음 | unique frame + black detect |
| TG | 수동 curl | 스크립트 자동 |
교훈: 수동으로 만지지 말 것. produce_pd.sh 한 줄이면 모든 게 V8/V9 스펙으로 나온다. 이게 표준이다.
🎨 보조 페이지 초등학생 비유 재작성 + NOTEBOOK_TITLES 100% (_Claude · 2026-08-08)
자체 평가 지적사항 전면 보완:
-
보조 페이지 4종 재작성: README.md · CONSTITUTION.md · GUIDE.md · CLAUDE.md
- README: “주머니 속 마법 공구상자” 커버, 로봇·비밀방·전시장 비유
- CONSTITUTION: 16개 조항 유지, 수호천사/꿈공장/바통터치 메타포 적용
- GUIDE: “레고 조립 설명서” 비유, 3단계(앱2개→주문1줄→확인)
- CLAUDE: “로봇 친구들 사용 설명서”, ParksyTTS 기술정보 보존 -
NOTEBOOK_TITLES 100% 등록: 47→99개 수동 한글 타이틀 (52개 신규 등록)
- coverage checker:manual_titles=99, auto_titled=0 -
아코디언 기본 펼침: 첫 2개 섹션(tracks, system) 기본 열림
-OPEN_DEFAULT = new Set(['tracks', 'system']) -
깨진 링크 수정: 76-page-writing-standard의
./file.md→다른문서.md(문서 예제로 변경) -
helena-faith·metalcare: GitHub에 아직 레포 없음 → 추후 생성 시 빌드
결과:
- gap=0, coverage=111.8%, manual_titles=100%
- 4레포 전부 재빌드·푸시 완료
🎨 랜딩 페이지 전면 재작성 — 초등학생 비유 버전 (_Claude · 2026-08-08)
요청: “아주 초등학생도 이해할 수 있는 비유로 전부 다 랜딩 페이지 웹페이지를 전부 다 바꿔”
완료: index.html(1,882줄) 전면 재작성. CSS/JS 22개 인터랙티브 기능 전부 유지, 콘텐츠 텍스트만 교체.
중심 비유 — 주머니 속 마법 공구상자:
| 기존 용어 | 새 비유 | 설명 |
|-----------|---------|------|
| Track 1 (돌봄) | 수호천사 | 누나를 24시간 지키는 안전벨트 |
| Track 2 (소망) | 꿈 공장 | 생각을 세상에 내보내는 작업실 |
| Claude Code (cc) | 글짓기 로봇 | 대장·감독. 글 쓰고 코드 짜고 총지휘 |
| Aider (ds) | 고치기 로봇 | 수리공. 눈은 없어도 손이 빨라요 |
| Grok | 그림 로봇 | 상상력 대장. 그림·영상·조사 |
| Auditor (미설치) | 감사 로봇 | 심판. 규칙 확인 (준비 중) |
| Termux + proot | 비밀 방 | 로봇 친구들이 사는 폰 속 리눅스 |
| GitHub | 무료 전시장 | 만든 걸 세상에 보여주는 공간 |
| YouTube | TV 방송국 | 영상 내보내기 |
| Telegram | 무전기 | 로봇→사람 보고 |
| Discord | 모임방 | 실시간 대화 공간 |
| Workcenters | 일곱 개 작업실 | 빵공장·전시장·방송국·무전기·일기장·웹진·모임방 |
| 월 비용 | 한 달 용돈 | 넷플릭스 하나 값 (₩55,000) |
| CONSTITUTION | 규칙책 | 16개 조항 |
| Handoff | 바통 터치 | 모든 열쇠는 누나 거 |
| Install | 주문 한 줄 | 앱 2개 + 한 줄 복사 |
비유 밀도: 128회 사용 — 모든 섹션에서 최소 1개 이상 비유 포함.
보존: 커스텀 커서, 스파인 프로그레스, 레이더 차트, 비용 파이, 터미널 타자기, 아키텍처 SVG 툴팁, 작업실 인터랙티브 맵, funnel ring, 도서관 검색, 아코디언 챕터, j/k 키보드 네비게이션, 테마 토글, 모바일 메뉴 — 전부 정상 동작.
🎬 PD Pipeline V7 — 프로급 업그레이드 완료 (_Claude · 2026-08-07)
V6에서 V7로 5가지 프로급 개선 적용:
- Breathing pauses — 비트마다
pause(초) 필드 추가. VO 끝나고 0.4~1.0초 숨 고르기. 숏폼이 아닌 설명형 영상에서 템포 조절의 핵심. - Zoom variety —
zoom_dir: in(줌인), out(줌아웃), pan_left, pan_right. Ken Burns 단조로움 탈피. 비트 감정에 따라 방향 매핑 (hook→in, trust→pan_right, map→out). - Per-slide color grade —
grade필드 추가. hook=gold(따뜻한 금빛), trust=warm, map=cool, rise=gold, handoff=cinematic. 비트별로 eq+colorbalance 분리 적용. - BGM volume envelope — 80-100% 구간에서 BGM 볼륨 1.5배 swell. 클라이맥스 강조. FFmpeg
volumeeval=frame 표현식 사용. - Staggered end card — 텍스트 요소 순차 등장 (0.3/0.8/1.3/1.8s). 브랜드→모토→핸들→URL.
alpha표현식 페이드인.
파일 변경:
- scripts/_render_video.py — V7 header, shot_bible beat_map, pan_x/zoom_expr 분기, staggered end card, BGM swell
- scripts/_make_srt.py — pause 간격을 SRT 타임라인에 반영
- scripts/produce_pd.sh — 기본 shot_bible에 V7 필드 추가, 헤더 V7 갱신
- out/pd_intro/shot_bible.json — pause/zoom_dir/grade 필드 포함
결과: TG 발송 성공 (msg 356). 50s 영상, 11MB playable, QA 10/10 unique 0 black.
교훈: DEFAULT_GRADE 정의 순서 문제 — shot_bible 파싱이 상수 정의보다 앞에 있으면 NameError. 문자열 리터럴로 우회.
🎬 Grok-free PD Pipeline v2 첫 실가동 — TG 발송 성공 (_Claude · 2026-08-07)
전체 파이프라인 통과. Kokoro jf_alpha 성우 + Android bridge 자동감지 + TG 발송.
파이프라인 흐름:
| 단계 | 내용 | 결과 |
|------|------|------|
| P1 Playwright | 6장 페이지 캡처 (390×844@3x) | ✅ |
| P2 Kokoro TTS | jf_alpha(sid=37) 6클립, 총 40.5초 | ✅ |
| P3 Bridge pickup | Gemini 영상 Android Movies/ → bridge/ 자동 복사 | ✅ |
| P4 Ken Burns | zoom_base=1.08, warm grade, slideup caption | ✅ |
| P5 Assemble | b_open(5.5s) + body(40.4s) + b_close(5.5s) + BGM | ✅ |
| P6 TG send | HTTP 200, message_id=349 | ✅ |
결과물:
- pd_intro_playable.mp4: 11MB, 51.5s, 1080×1920, yuv420p High@L4.0
- pd_intro_tg.mp4: 4.5MB, 720×1280
- QA: unique=10/10, black=0 — ALL PASS
파이프라인 디버그 3건:
1. _bridge_pickup.sh — Android 디렉토리 없을 때 set -e 방어 (scan_dir() + || true)
2. _render_video.py — zoom_base 1.0→1.08, 레터박스 최소화 (첫 프레임 luminance 2.2→10+)
3. _qa_video_slides.py — black threshold 8.0→5.0 (다크 테마 사이트 평균 luminance 10~13 대응)
Android bridge 워크플로 (Boss 수동):
1. Gemini/공짜LLM으로 open/close 영상 제작
2. Android Download 또는 Movies 폴더에 저장
3. produce_pd.sh 실행 → _bridge_pickup.sh가 3-tier 감지 (exact → prefix → latest fallback)
4. 이번 실행: gemini_generated_video_a3509220.mp4(2.6MB) → b_open, gemini_generated_video_4cf4c478.mp4(2.4MB) → b_close
커밋: 03885c3 — 6 files, +877/−303
관련: [[tts-rvc-lightweight-solution]]
✅ Kokoro FP32 + jf_alpha — AI 성우 솔루션 확정 (_Claude · 2026-08-07)
최종 결정: Kokoro-82M FP32 ONNX + jf_alpha(일본인 여성) 화자로 한국어 더빙.
시행착오 경로:
| 단계 | 모델 | 결과 | 사유 |
|------|------|------|------|
| 1 | ParksyTTS (GPT-SoVITS) | ❌ | 471초/3.5초 — 실사용 불가 |
| 2 | Kokoro INT8 | ❌ | ARM64 디퀀트 버그 → NaN 출력 |
| 3 | Kokoro FP32 | ✅ | RTF ~2x, 정상 오디오 |
| 4 | VITS Mimic3 한국어 | ❌ | 자연스러움 3.4/5 — Kokoro(4.8) 대비 열세 |
| 5 | Kokoro jf_alpha | ✅ 확정 | 일본인 억양 = 단점 아닌 캐릭터 자산 |
핵심 통찰 (Boss): jf_alpha의 어설픈 한국어 발음이 오히려 “한국어를 열심히 배우는 착한 일본인 AI”라는 차별화된 캐릭터성을 만든다. 완벽한 발음보다 기억에 남는 목소리가 낫다.
모델 스펙:
- Kokoro-82M FP32 (csukuangfj/kokoro-multi-lang-v1_0)
- 311MB ONNX, 53 화자, Apache 2.0
- jf_alpha (sid=37), lang=ko, 24000Hz
- S21 proot CPU: RTF ~2x, RMS 0.08
voice_engine.py: SHERPA_SID=37 기본값, kokoro-fp32-v1_0/ 자동 탐지.
삭제: SoVITS 파생물 878MB, VITS Mimic3 79MB, INT8 Kokoro 183MB — 총 1,140MB 정리.
메모리: [[tts-rvc-lightweight-solution]] 갱신 완료.
🎤 경량 TTS + RVC 성우 더빙 솔루션 확정 (_Claude · 2026-08-07)
판단: ParksyTTS(GPT-SoVITS) 포기. 경량 TTS + RVC ONNX 조합으로 전환.
SoVITS 삭제 대상 (878MB 정리 예정):
| 파일 | 크기 | 삭제 사유 |
|------|------|----------|
| voice_models/parksy_v2/parksy_v2_vits.onnx | 323MB | VITS 디코더 ONNX — GPT 병목 미해결, 반쪽 |
| voice_models/parksy_v2/parksy_v2_vits_decode.onnx | 241MB | ONNX 디코더 변형 — 동일 문제 |
| parksy-tts-v1/models/sovits/parksy_v2_e8_s256.pth | 165MB | SoVITS 체크포인트 — 471초 병목의 원흉 |
| parksy-tts-v1/models/gpt/parksy_v2-e15.ckpt | 149MB | GPT stage 체크포인트 — autoregressive 1500 iter |
시행착오 요약:
1. GPT-SoVITS 설치 → arm64 의존성 3종 충돌 해결 (numba, librosa, torchcodec)
2. ParksyTTS v1 추론 테스트 → 471초 for 3.5초 음성, 실시간 대비 135배
3. VITS 디코더 ONNX export 성공 → 디코더만 가속, GPT stage는 여전히 PyTorch
4. 한국어 BERT 불필요 확인 → 0-vector 처리
5. GPT autoregressive token prediction → CPU에서 구조적 병목, ONNX로도 해결 불가
6. 결론: GPT-SoVITS 아키텍처 자체가 CPU 실사용에 부적합. 포기 확정.
시행착오 끝에 얻은 교훈:
- Autoregressive 모델(GPT stage decoder)은 CPU에서 답이 없다
- 생성(Generate) 대신 변환(Convert) — RVC가 훨씬 가볍다
- SoVITS는 GPU 있는 환경에서나 의미 있는 도구
대체 전략 (3단계):
1. Sherpa-ONNX Kokoro 한국어 (jf_alpha) — 공짜·Apache 2.0·이미 S21에 설치
2. RVC ONNX INT8 — 누나 목소리 변환 (~72ms)
3. Grok TTS 사용 안 함 (저작권 무관하나 403 미지원)
저장: _notebook/74-tts-rvc-lightweight-solution_Claude.md (전문)
🗑️ SoVITS 878MB 삭제 + 건강 검진 (_Claude · 2026-08-07)
건강 검진: Grade B (25통과/5경고/2실패). 배터리 89%·43.1°C. GPS·클립보드 실패는 proot 제약.
SoVITS 삭제 내역 (878MB → 12KB):
voice_models/parksy_v2/parksy_v2_vits.onnx 323MB ✕
voice_models/parksy_v2/parksy_v2_vits_decode.onnx 241MB ✕
parksy-tts-v1/models/sovits/parksy_v2_e8_s256.pth 165MB ✕
parksy-tts-v1/models/gpt/parksy_v2-e15.ckpt 149MB ✕
- voice_models/ 전체: 1GB+ → 183MB (Kokoro INT8만 남음)
- parksy-tts-v1/ Python 코드는 참고용 보존, 모델 웨이트만 삭제
🎯 ParksyTTS VITS 디코더 ONNX export 성공 (_Claude · 2026-08-07)
결과:
- voice_models/parksy_v2/parksy_v2_vits.onnx — 322.7 MB, 84.8M 파라미터
- PyTorch → ONNX 변환 성공, onnxruntime 추론 검증 완료
- 입력: text_seq(phoneme IDs) + pred_semantic(GPT tokens) + ref_audio + sv_emb
- 출력: raw audio waveform @ 32000Hz
과정:
- GPT-SoVITS 내장 onnx_export.py 발견 → ParksyTTS 모델 경로로 수정
- 의존성 8종 설치: pytorch_lightning, matplotlib, x-transformers, onnxscript, huggingface_hub, transformers, peft, jieba
- v2Pro sv_emb 문제: TTS_infer_pack 의존성 체인 과다(Chinese NLP 포함) → 제로 임베딩으로 우회 (단일 화자)
- scripts/_export_parksy_vits_onnx.py 신규 작성 (VITS 디코더 전용)
한계:
- GPT stage(stage decoder, 1500 iterations autoregressive)는 아직 PyTorch → 여전히 병목
- VITS 디코더만 ONNX: semantic token prediction 속도는 그대로
- 실제 end-to-end 가속 위해 GPT stage decoder도 ONNX export 필요
앞으로:
- [ ] 실제 reference audio로 sv_emb 정확 계산 (TTS_infer_pack 의존성 해결 후)
- [ ] GPT stage decoder ONNX export (autoregressive loop → onnxruntime)
- [ ] voice_engine.py에 onnxruntime VITS 디코더 통합
- [ ] Kokoro 모델은 폴백으로 유지, ParksyTTS ONNX가 우선
⚡ 세션 끊김 + ParksyTTS/NPU 재개 체크리스트 (_Claude · 2026-08-07)
세션 상태:
- 2026-08-07 세션 2회 이상 끊김 (장시간 ParksyTTS CPU 추론 7분+ 중 타임아웃 추정)
- PD Pipeline v2 코드 완성됐으나 uncommitted. scripts/_render_video.py V5, produce_pd.sh v2, _pd_assemble.py, _qa_video_slides.py, configs/video_pd_pipeline_v2.json 등 10여 개 파일 스테이징 대기.
- CLAUDE.md 상단에 🚨 ParksyTTS on S21 — 세션 시작 시 필독 섹션 추가 완료
ParksyTTS 현황:
- parksy_v2 checkpoints 314MB 로컬 /root/work/helena-programming/tools/voice/ 에 있음
- CPU-only 추론: 471초(7분51초) for 3.5초 음성 → 실사용 불가
- arm64 의존성 3종 해결 완료: numba → soundfile, librosa 충돌 없음, torchcodec 0.15.0 설치
- 한국어 BERT 불필요 → 0-vector 처리 반영
NPU/GPU 가속 현황 (진행 중):
| 항목 | 상태 | 세부 |
|------|------|------|
| GPU Mali-G78 | ❌ proot 블록 | /dev/mali0 + /vendor/lib64/libOpenCL.so 있으나 glibc/bionic ABI 충돌 |
| NPU Exynos | ❌ permission | NCP v24 커널 확인, /sys/class/drm 접근 불가 |
| Termux 브릿지 | 🔑 해법 | Termux(bionic) → DRM/NPU sysfs 접근 가능, proot ↔ Termux localhost 브릿지 구상 |
| Sherpa-ONNX | ⏳ 단기대안 | Kokoro/VITS CPU 추론이 GPT-SoVITS보다 10~100배 빠름, NNAPI delegate 포함 Android prebuilt 탐색 중 |
다음 세션 재개 시 할 일:
1. ✅ CLAUDE.md 읽기 (ParksyTTS 섹션부터)
2. Sherpa-ONNX NNAPI Android binary 있는지 확인 → Termux pkg install onnxruntime
3. Termux에 sherpa-onnx NNAPI delegate 테스트
4. proot ↔ Termux localhost 브릿지 PoC
5. PD Pipeline v2 커밋·푸시
주의:
- TTS_ENGINE=local 이 기본값, grok은 403이라 무의미
- 장시간 추론 시 watchdog ping 또는 중간 체크포인트 저장
- 이 일지는 _notebook/99-devlog.md — 항상 여기 먼저 읽고 재개할 것
🔋 핸드폰이 PC가 되는 과정 — 전자의 마구간 (_Claude · 2026-08-07)
오늘의 명제: PC가 “PC”인 이유는 CPU·메모리·디스크가 한 박스 안에서 연산을 완결하기 때문. S21이 하는 일이 정확히 그거다 — GPT-SoVITS 추론부터 오디오 합성까지 폰 안에서 전부 끝내는 것. 클라우드로 연산 던지고 결과만 받아오는 게 아니라.
물리적 프레임 — “전자를 부리는 마구간”:
컴퓨팅을 “정보”나 “지능”으로 착각하는 게 가장 흔한 오해. 실제로는 전자를 게이트 통과시키는 물리적 노동. GPU 코어 하나하나가 전자를 특정 방향으로 밀어붙이는 걸 초당 수십억 번 반복하고, 그 과정에서 열이 나고 전기를 먹는다. “말을 부려 먹는다”는 비유가 과장이 아니라 문자 그대로 — 옛날엔 말이 물리적 힘을 냈고, 지금은 전자가 물리적 일을 하는 것, 매체만 바뀐 거다.
말을 부리려면 마구간과 목초지가 필요하듯, 전자를 부리려면 반도체(트랜지스터 배열)라는 물리적 공간이 필요. 클라우드 API는 “남의 마구간에서 말을 빌려 쓰는 것” — 편하지만 그 말이 지금 뭘 하는지, 얼마나 정직하게 일하는지, 다음에도 빌려줄지 전부 남의 손에 달려있다. S21은 내 소유의 물리적 워크센터. 작지만 내 거고, 내가 통제한다.
오늘 작업 — 의존성 3종 돌파:
| 패키지 | 상태 | 버전 | 비고 |
|---|---|---|---|
torchcodec |
✅ 신규 설치 | 0.15.0+cu130 | --break-system-packages 필요 |
numba |
✅ 기설치 정상 | 0.66.0 | 충돌 없음 |
librosa |
✅ 기설치 정상 | 0.11.0 | ParksyTTS 요구 0.10.2보다 높지만 호환 |
ParksyTTS v1 실전 테스트:
- 텍스트: “안녕 헬레나 오늘은 전자가 진짜 일하는 날이야”
- 결과: 3.5초 WAV, peak=0.880, 품질 양호
- 추론 시간: 471초 (7분 51초) — 실시간 대비 135배 느림
- 병목: GPT-SoVITS semantic token prediction (1500 iterations, ~3s/it on CPU)
- CPU-only 제한: is_half=False, device="cpu"
NPU/GPU 하드웨어 실태 조사:
| 자원 | 하드웨어 | 커널 | userspace | proot 접근 |
|---|---|---|---|---|
| CPU | Exynos 2100 (8코어) | ✅ | ✅ glibc | ✅ |
| GPU | Mali-G78 | ✅ /dev/mali0 |
✅ /vendor/lib64/libOpenCL.so + Vulkan |
❌ glibc/bionic 충돌 |
| NPU | Samsung Exynos NPU | ✅ NCP v24 | ❓ ENN SDK 미확인 | ❌ /sys/class/drm permission |
핵심 발견 — Termux가 열쇠:
- proot Ubuntu (glibc) → GPU/NPU 직통 불가 (ABI 충돌)
- Termux (bionic) → DRM + NPU sysfs 접근 가능!
- 하지만 Termux pip로 onnxruntime/sherpa-onnx 설치 불가 (Android wheel 없음)
NPU 전략 (앞으로):
1. Termux pkg로 onnxruntime 설치 (Termux 사용자 권한 필요, root 불가)
2. sherpa-onnx Android prebuilt binary (NNAPI delegate 포함)
3. proot ↔ Termux localhost 브릿지 서비스
4. 단기: Sherpa-ONNX Kokoro/VITS로 CPU 추론 가속 (GPT-SoVITS보다 10~100배 빠름)
Grok TTS API 403 이슈:
- xAI auth JWT 정상, /v1/tts/voices 호출 → HTTP 403 Forbidden
- SuperGrok 구독($30/월)에 TTS API 미포함 또는 별도 티어 필요
- 현재 Grok TTS는 사용 불가 상태
오늘의 교훈:
- “핸드폰이 PC가 되는 과정” = 외부 도움 없이 자체 연산 완결 능력 확보
- 그 연산의 실체는 “전자를 물리적으로 부리는 것” — 마구간은 작아도 내 것
- 소프트웨어 의존성(numba, librosa, torchcodec)은 해결됨
- 하드웨어 가속(NPU/GPU)은 소프트웨어보다 구조적 난이도가 한 단계 높다
- proot은 편하지만 결국 하드웨어 앞에서 한계 — Termux 네이티브 브릿지가 정답
🎙️ voice_engine v2 완성 + pd_intro 더빙·발송 (_Claude · 2026-08-06)
- voice_engine.py 리팩토링 완료 (b868a37)
- Grok TTS 경로 버그 수정 (
parents[2]→parents[1]) - ParksyTTS v1 + Sherpa-ONNX local 프로바이더 통합
synthesize(): asyncsynthesize_beat()→ sync 래퍼 패턴humanize_tts(): 단일 broadcast 체인, 불필요 light/heavy 분기 제거- CLI main +
list_voices_grok()제거 (grok_tts.py로 위임) - pd_intro 파이프라인 실행
- Grok/Ara 성우 6비트 더빙 → 총 39.8초 VO
- Ken Burns + BGM (Satie Gymnopédie whisper vol) + 브릿지 북엔드
- QA gate PASS: unique_frames=10/10, black=0
- 최종:
pd_intro_playable.mp411MB 50.8s ·pd_intro_tg.mp44.5MB - TG 발송 성공: message_id=323
📋 PD Grok 업무수첩 종합 리포트 (_Grok · 2026-08-06)
*_Grok 40종 정리 → 1장 마크다운 + TG 전송.
| 항목 | 값 |
|---|---|
| 문서 | _notebook/73-pd-grok-notebook-report_Grok.md |
| TG document | message_id 319 |
| TG 요약 | tg.sh 성공 |
| 정본 | PD pipeline v2 LOCK · 역할 = GPU 대용 80% 프로 마감 |
| 헬스 | Grade B · 갭 HTML 4건 (#70–72) |
🎤 AI 성우 코어 local 프로바이더 완성 (_Claude · 2026-08-06)
voice_engine.py에 local 프로바이더 추가 완료. ParksyTTS v1 우선, Sherpa-ONNX 폴백 구조.
voice_engine.py (190→389줄, +199):
- _tts_local_parksy(): ParksyTTS v1 GPT-SoVITS v2Pro 래퍼
- _tts_local_sherpa(): Sherpa-ONNX Kokoro/VITS 오프라인 추론
- tts_local(): ParksyTTS 우선 → Sherpa 폴백 디스패처
- _find_parksytts_root() / _find_sherpa_model(): 모델 자동 탐지
- synthesize_beat()에 local 케이스 추가
- TTS_ENGINE=local 환경변수 지원
신규 스크립트:
- scripts/record_voice_samples.sh: 30문장 녹음 + ffmpeg 정규화
- scripts/train_voice.py: 로컬/클라우드 파인튜닝
- GitHub Actions workflow train-voice.yml 자동 생성
사용법:
TTS_ENGINE=local bash scripts/produce_intro.sh
python3 scripts/train_voice.py --samples voice_samples/ --out my_voice --cloud
관련: notebook #70 업데이트.
🏭 시리즈 제작 표준 파이프 확정 (_Boss)
원칙: 매번 달라지지 말 것. 모든 에피소드 동일 프로세스.
표준 파이프: scripts/episode_produce.sh <에피소드> <URL> <제목>
4단계 고정:
1. Playwright 페이지 스크린샷 (4구간)
2. 페이지 h1/h2/p → TTS 대본 자동 추출 → edge-tts
3. ffmpeg 클립 인코딩 + concat (720p, CRF 28, ultrafast)
4. TG sendVideo 전송
페이지 표준: 각 에피소드 전용 페이지 필요 (notebook/series/e01~e24.html)
- 인터랙티브 요소 (data-click-target)
- 클릭 아코디언 (flow-step)
- S21 Phone 브랜드 스타일 (gold·teal·dark)
MCP화 계획: 추후 episode-produce MCP 도구로 등록 → Claude Code가 스위치 온 → 표준 파이프 실행 → 자동 종료. 서버 상시 대기 불필요.
🎬 E01 제작 완료 — 스마트폰에 리눅스를? (_Boss + _Claude)
최초 시리즈 영상 제작 성공.
| 항목 | 값 |
|---|---|
| 파이프 | perfect_ship.py --url helena_phone --format shorts_1080 --subs --tts auto |
| TTS | edge-tts + humanize (b0_cover~b3_agents 4비트) |
| 전송 | TG message_id 177 |
| 교훈 | head -N = SIGPIPE 사망. CRF 17 → 폰에선 23~28 타협 |
📚 YouTube 교재 — 5챕터 플레이리스트 구조 (_Boss)
각 챕터 = YouTube 플레이리스트 1개. 챕터 순차 제작·공개.
| 챕터 | 플레이리스트 | 편수 | 내용 |
|---|---|---|---|
| Ch1 | 개발 환경 — PC 없는 코딩 | 4편 | Termux·proot·AI 3종·GitHub Pages·헌법 |
| Ch2 | 콘텐츠 인프라 — 자동화 공장 | 4편 | md→html·건강검진·TG봇·에이전트 직함 |
| Ch3 | 영상 파이프 — Director 전쟁 | 6편 | v1→v8·Visual Proof·Vision QA·5막·perfect_ship |
| Ch4 | 임계점 — 한계 돌파 | 5편 | V2 천장·NPU·Gallery·CDN·비용 트랙 |
| Ch5 | 완성 — 폰이 서버다 | 5편 | 샌드박스 파괴·다리·자동화·음성 명령·회고 |
챕터별 제작 순서: Ch1 먼저 완결 → Ch2 → Ch3 → Ch4 → Ch5
챕터 내 순서: E01부터 순차. 각 챕터 완결 시 플레이리스트 공개.
🎬 YouTube 시리즈 — 제작 계획서 (_Boss)
상태: 제작 대기. 모든 파이프 준비 완료. Boss “찍어” 한마디면 시작.
제작 파이프 (기보유)
# 찌라시/PPT 영상 (2~3분, TTS 나레이션)
perfect_ship.py --url <대상URL> --out <출력> --format shorts_1080 --subs --tts auto
# 스크린샷 → 슬라이드쇼
auto_image_pipe.sh
# TG 배포
tg.sh "✅ 새 영상: https://youtube.com/shorts/xxx"
제작 가능 편수
| 유형 | 편수 | 소스 |
|---|---|---|
| 리포 소개 | 1편 | index.html 랜딩페이지 |
| 헌법 해설 | 9편 | CONSTITUTION.md 9섹션 |
| 설치 가이드 | 1편 | install-guide.html |
| 기능 소개 | 10편+ | Director, auto_image_pipe, health, MCP 등 |
| 시즌 1~5 본편 | 24편 | 기술 진화 연대기 |
| 주간 하이라이트 | 주1편 | devlog 요약 |
| 계 | 50편+ |
콘텐츠 소스 맵
| 시즌 | 편 | 소스 문서/URL |
|---|---|---|
| S1E1 | 스마트폰에 리눅스를 | 01-proot-setup/ · devlog §1 |
| S1E2 | AI에게 위임하라 | 41-beginner-install-manual_Grok.md · devlog §2 |
| S1E3 | 공짜 서버를 찾아서 | index.html · devlog §3~10 |
| S1E4 | 헌법을 쓴 AI | CONSTITUTION.md · devlog §30 |
| S2E5 | 마크다운이 웹진이 된다 | 33-webpage-coverage_Grok.md · devlog §11 |
| S2E6 | 건강 검진하는 폰 | phone-health.sh · devlog §17 |
| S2E7 | 텔레그램으로 모든 걸 | tg.sh · devlog §7 |
| S2E8 | AI 3종의 직함 | 31-agent-roles_Grok.md · devlog §62~63 |
| S3E9 | 영상이 깨졌다 | 48-director-video-recurrence_Grok.md |
| S3E10 | 눈속임을 잡아라 | 50-director-pro-v3-visual-proof_Grok.md |
| S3E11 | AI의 눈 | 52-director-vision-qa-loop_Grok.md |
| S3E12 | 연출을 코드로 | 53-director-plan-settings_Grok.md · 54 |
| S3E13 | 만점의 알고리즘 | 56-director-perfect-ship-process_Grok.md |
| S3E14 | 커뮤니티 수준까지 | 57-director-community-a-bar_Grok.md |
| S4E15 | 여기까지다 | devlog §임계점 |
| S4E16 | NPU의 거짓말 | devlog §이미지 전략 |
| S4E17 | Gallery는 API가 없다 | devlog §Gallery |
| S4E18 | YouTube = 공짜 CDN | devlog §CDN |
| S4E19 | Grok은 옵션이다 | devlog §비용 트랙 |
| S5E20 | 샌드박스의 벽 | devlog §브릿지 |
| S5E21 | 다리 | devlog §auto_image_pipe |
| S5E22 | 터치 노동의 종말 | auto_image_pipe.sh · devlog §자동화 |
| S5E23 | 말이 곧 명령이다 | devlog §음성 명령 |
| S5E24 | 폰이 곧 서버다 | 전체 아키텍처 회고 |
제작 순서 (우선순위)
- 리포 소개 (찌라시) — 3분. 랜딩페이지 투어. “와서 볼래요”
- S1E1 스마트폰에 리눅스를 — 설치 과정. 초심자 타겟
- S2E5 마크다운이 웹진이 된다 — 자동화 가시적 성과
- S3E9 영상이 깨졌다 — 드라마틱한 실패 에피소드
- S5E21 다리 — 오늘의 돌파구
- 이후 순차 제작
필요 리소스
| 항목 | 현재 | 비고 |
|---|---|---|
| 콘텐츠 소스 | ✅ 100개+ 문서·노트북 | GitHub Pages에 전부 라이브 |
| 영상 제작 파이프 | ✅ perfect_ship.py |
V2 수준 자동화 |
| TTS | ✅ edge-tts (무료) | OpenAI 키 있으면 고품질 |
| 촬영 | ✅ Playwright | 페이지 캡처 자동 |
| 편집 | ✅ ffmpeg | concat·자막·트랜지션 |
| 배포 | ✅ YouTube Data API | OAuth 완료 |
| 호스팅 | ✅ YouTube 무료 | 공짜 CDN |
결론: 기술적 장애물 없음. Boss “찍어” 결정만 남음.
🎬 YouTube 시리즈 기획 — Helena Phone 기술 진화 5시즌 (_Boss)
제약: PC/WSL 없음. 2021년 갤럭시 S21(Exynos 2100, RAM 7GB) + proot Ubuntu 단독.
시즌 1: “PC 없는 개발자” (기반 구축)
| # | 에피소드 | 핵심 기술 |
|---|---|---|
| 1 | 스마트폰에 리눅스를? | Termux + proot Ubuntu 설치. PC 없이 apt-get, Python, Node.js |
| 2 | AI에게 위임하라 | Claude Code + DeepSeek. Anthropic 과금 우회. Grok CLI + Aider 3종 |
| 3 | 공짜 서버를 찾아서 | GitHub Pages 5개 레포. Git으로 버전 관리. 랜딩 포털 |
| 4 | 헌법을 쓴 AI | CONSTITUTION.md 제정. 돌봄(트랙1) + 소망(트랙2) 투트랙 구조 |
시즌 2: “콘텐츠 공장” (자동화 인프라)
| # | 에피소드 | 핵심 기술 |
|---|---|---|
| 5 | 마크다운이 웹진이 된다 | _notebook/*.md → notebook/*.html 자동 빌드. 웹앱 UI |
| 6 | 건강 검진하는 폰 | phone-health.sh. 배터리·온도·저장소 모니터링. TG 보고 |
| 7 | 텔레그램으로 모든 걸 | tg.sh. 보고·알림·파일 전송. Paste Pipeline |
| 8 | AI 3종의 직함 | Grok=디자이너, Aider=반장, Claude=감사. 파일 마크 규약 |
시즌 3: “영상 자동화 전쟁” (Director 파이프)
| # | 에피소드 | 핵심 기술 |
|---|---|---|
| 9 | 영상이 깨졌다 | Director v1. 한글 □□ 폰트 참사. 블랙 프레임. 재발일지 |
| 10 | 눈속임을 잡아라 | Visual Proof. 가짜 SHIP 적발. gold/teal 픽셀 게이트 |
| 11 | AI의 눈 | Vision QA v1–v8. 프레임 검수 자동화. 100점 루프 |
| 12 | 연출을 코드로 | 5막 연출 성경. establish→focus→act→hold→release |
| 13 | 만점의 알고리즘 | perfect_ship L0–L9 사다리. remediation_map. SHIP 게이트 |
| 14 | 커뮤니티 수준까지 | 1080p. autoZoom. TTS-first. 자막. A-bar |
시즌 4: “임계점” (한계 인식과 전환)
| # | 에피소드 | 핵심 기술 |
|---|---|---|
| 15 | 여기까지다 | V2 천장 선언. 빅테크 튜토리얼은 폰에서 불가. V3=PC 연동 |
| 16 | NPU의 거짓말 | Exynos 2100 NPU로 SD 추론 불가. 무료 티어 오케스트레이션 |
| 17 | Gallery는 API가 없다 | CLI 제어 불가. ffmpeg으로 90% 대체 |
| 18 | YouTube = 공짜 CDN | 무제한·무료·전 세계 엣지. GitHub Pages 1GB 제한 우회 |
| 19 | Grok은 옵션이다 | LLM 비용 트랙: 0원(무료 티어) → 1만원(DeepSeek) → $30(Grok) |
시즌 5: “폰이 서버다” (완전 자동화)
| # | 에피소드 | 핵심 기술 |
|---|---|---|
| 20 | 샌드박스의 벽 | proot에서 /sdcard 접근 불가. SAF·content provider 전부 실패 |
| 21 | 다리 | Termux ~/ = proot ~/ 발견. cp 한 줄로 Android↔Linux 연결 |
| 22 | 터치 노동의 종말 | auto_image_pipe.sh. 사진 넣으면 영상→TG 자동 |
| 23 | 말이 곧 명령이다 | Boss 말 한마디 → Claude Code → CLI 파이프 → TG 결과 |
| 24 | 폰이 곧 서버다 | 전체 아키텍처 회고. 구형 폰 하나로 1인 제작 인프라 완성 |
총 24편 · 5시즌
시즌별 기술 도약:
1. 기반: PC 없이 CLI 개발환경 + AI 에이전트 + Git 생태계
2. 자동화: 문서→웹진 빌드 + 헬스 모니터링 + TG 보고
3. 영상: Playwright 촬영 → ffmpeg 합성 → Vision QA → SHIP 사다리
4. 전환: 폰 한계 인식 → V3 PC 연동 → 무료 티어 전략 → 비용 트랙
5. 완성: Android↔proot 브릿지 → 사진→영상→배포 무인화 → 음성 명령
핵심 서사: “5년 된 폰 하나로, 공짜 도구만으로, 말 한마디로 콘텐츠 공장을 돌리다.”
DAY — 2026-08-03
🔓 proot ↔ Android 저장소 다리 개통 — 사진→영상→TG 파이프 최초 성공 (_Boss + _Claude)
돌파구: Termux ~/ = proot /data/data/com.termux/files/home/ = 공유 영역
cp /sdcard/DCIM/Screenshots/Screenshot_* ~/ # Termux에서
→ proot에서 바로 ffmpeg 처리 → TG 전송 성공.
의미:
- 터치 노동 탈피: 갤러리·편집앱·저장버튼 없이 CPU/GPU 직행 연산
- 폰 = 1인 제작 서버: 입력(사진)→전송→로컬연산(ffmpeg)→인코딩→배포(TG) 자동화
- 샌드박스 파괴: Android 파일시스템 ↔ proot 우분투 파이프 연결
검증:
- 스크린샷 2장 → ffmpeg 슬라이드쇼 (6초, 720p, 323KB) → TG 전송 완료
- TG 토큰 갱신 (.bashrc 업데이트)
Gemini 평가: “터치 노동으로 하던 일을 폰 내부의 자율 연산 파이프라인으로 전환. 구조 변화 자체가 엄청난 포인트.”
📋 proot ↔ Termux 다리로 풀리는 팬딩 이슈들 (_Boss)
이전까지 막혔던 것 — proot가 Android 샌드박스에 갇혀서:
1. DCIM/Camera 사진 자동 처리 — ❌ proot에서 /sdcard 접근 불가
2. 스크린샷 → 영상 → 배포 — ❌ 동일
3. 카메라 촬영 → ffmpeg 직결 — ❌
4. 다운로드 폴더 감시 — ❌
5. Android 알림 → proot 트리거 — ❌
이제 되는 것 (Termux ~/ 중계):
| # | 새로 가능한 것 | 방법 |
|---|---|---|
| 1 | 사진 찍으면 자동 영상화 | Termux inotifywait ~/ → 새 파일 감지 → ffmpeg → TG |
| 2 | 스크린샷 → 블로그·TG 자동 | cp /sdcard/DCIM/Screenshots/* ~/ → 처리 파이프 |
| 3 | termux-camera-photo → ffmpeg → YouTube | Termux:API 카메라 → ~/ 저장 → proot 처리 |
| 4 | 클립보드 브릿지 | termux-clipboard-get/set → proot 파이프 입력 |
| 5 | Android 알림 발행 | termux-notification → 파이프 완료 시 폰 알림 |
| 6 | TTS 읽어주기 | termux-tts-speak → TG 보고 도착 시 음성 알림 |
| 7 | 문자·통화 로그 수집 | termux-sms-list · termux-call-log → proot 분석 |
| 8 | 배터리·센서 모니터링 | termux-battery-status · termux-sensor → 대시보드 |
| 9 | 홈 화면 위젯 트리거 | ~/.shortcuts/ 스크립트 → 터치 한 번으로 파이프 가동 |
| 10 | 공유 메뉴 → proot 직결 | Termux:API 공유 수신 → ~/ 저장 → 자동 처리 |
아키텍처:
📱 Android (센서·카메라·저장소·알림)
│
▼ Termux ~/ (공유 브릿지)
│
🖥️ proot Ubuntu (ffmpeg·Director·Python·Claude Code)
│
▼
🌐 배포 (TG·YouTube·블로그)
이 다리 하나로 Director v1→v8 같은 진화가 이미지 파이프에서도 가능해짐.
🤖 auto_image_pipe.sh — 사진→영상→TG 완전 자동화 (_Boss + _Claude)
풀파이프 최초 성공: 수신함에 사진 넣으면 → ffmpeg 슬라이드쇼 → TG 자동 전송 → 처리 완료.
사용법:
# 1회 실행 (inbox 처리 후 종료)
bash ~/work/scripts/auto_image_pipe.sh
# 감시 모드 (새 파일 생기면 자동 처리)
bash ~/work/scripts/auto_image_pipe.sh --watch
파이프:
📥 ~/inbox/ (Termux 공유 홈)
→ 🎬 ffmpeg concat (720p, 각 3초)
→ 📤 TG sendVideo
→ 📦 ~/processed/ (완료 보관)
테스트 결과:
- 스크린샷 3장 → 212KB mp4 → TG 전송 성공
- 공백 포함된 한글 파일명 정상 처리
- --watch 모드: inotifywait으로 새 파일 실시간 감지
파일: scripts/auto_image_pipe.sh
💾 proot/Termux 데이터 생존성 분석 (_Boss)
질문: 폰 재부팅하거나 Termux 지우면 설정 날아가나?
| 상황 | proot | 스크립트 | repos | 설정 | 파이프 |
|---|---|---|---|---|---|
| 폰 재부팅 | ✅ 유지 | ✅ 유지 | ✅ 유지 | ✅ 유지 | ⚠️ 상시 프로세스만 재시작 |
| Termux 강제종료 | ✅ 유지 | ✅ 유지 | ✅ 유지 | ✅ 유지 | ⚠️ 동일 |
| Termux 캐시 삭제 | ✅ 유지 | ✅ 유지 | ✅ 유지 | ✅ 유지 | ✅ |
| Termux 앱 삭제 | ❌ 전부 날아감 | ❌ | ❌ | ❌ | ❌ |
| 공장 초기화 | ❌ 전부 날아감 | ❌ | ❌ | ❌ | ❌ |
원리:
- proot 우분투는 /data/data/com.termux/files/ 아래 파일 시스템으로 저장
- 앱 데이터 영역이라 재부팅·강제종료에도 유지
- Termux 앱 삭제 시에만 통째로 증발
방지책:
- 모든 코드는 GitHub에 푸시 완료 → git clone 한 번이면 복구
- proot 우분투는 install.sh로 재설치 가능
- .bashrc 설정(TG_TOKEN 등)만 별도 백업하면 완전 복구
tar -czf /sdcard/termux-backup-$(date +%Y%m%d).tar.gz \
/data/data/com.termux/files/home/.bashrc \
/data/data/com.termux/files/home/.profile \
/root/.bashrc
/sdcard/는 Termux 삭제와 무관하게 보존됨 → 거기에 백업 저장
결론: 재부팅 걱정 마라. Termux만 지우지 마라.
🗣️ 음성 명령 아키텍처 — Boss 말 한마디로 전부 (_Boss)
목표: Termux 화면에서 말로 요청하면 모든 작업이 자동 실행.
현재 완성된 음성→파이프 맵:
| Boss 말 | 실행 파이프 | 상태 |
|---|---|---|
| “영상 만들어” | perfect_ship.py (Director L0–L9) |
✅ |
| “이 사진 영상으로” | auto_image_pipe.sh |
✅ 오늘 완성 |
| “TG로 보고해” | tg.sh |
✅ |
| “건강 검진해” | phone-health.sh |
✅ |
| “깃헙에 올려” | git add/commit/push | ✅ |
| “이미지 만들어” | Grok Aurora / Bing / Gemini | ✅ |
| “유튜브에 올려” | YouTube Data API | ⏳ |
| “자막 넣어” | subtitles.py 연동 |
⏳ |
| “목소리 입혀” | voice_engine.py 연동 |
⏳ |
| “블로그 발행해” | Paste Pipeline | ⏳ |
| “매일 아침 보고” | Cron + TG | ⏳ |
아키텍처:
Boss 음성/텍스트 명령
│
▼
Claude Code (판단·라우팅)
│
▼
CLI 파이프 (ffmpeg, Director, git, TG API)
│
▼
📤 TG로 결과 배달
핵심: 폰은 듣고 있는 서버. Boss 목소리가 유일한 인터페이스. 터치 노동 개입 없음.
📋 2026-08-03 세션 총정리 (_Boss + _Claude)
오늘 뚫은 것 3가지:
-
proot ↔ Android 저장소 다리
- Termux~/= proot~/공유 영역 발견
-/sdcard샌드박스 우회.cp한 줄로 데이터 직결 -
사진→영상→TG 풀파이프
-auto_image_pipe.sh: 수신함 감지 → ffmpeg → TG → 보관
- 1회 실행 +--watch실시간 감시 모드 -
음성→파이프 아키텍처 확립
- Boss 말 한마디 → Claude Code 판단 → CLI 파이프 실행 → TG 결과
- 터치 0회. 폰 = 1인 제작 서버
팬딩 7종: YouTube 업로드, 자막, TTS, 블로그 발행, Cron 자동화, MCP stdio 전환, PC V3 연동
커밋: 32d3652 (auto_image_pipe.sh), 6e14403 (데이터 생존성), 0fbf2b3 (브릿지 개통)
🕐 proot Ubuntu 시계 → 한국 시간(KST) 고정 (_Grok)
배경: 세션 로그·ls mtime이 5:52 PM 등으로 찍혀 헷갈림. proot Ubuntu가 기본 UTC(Etc/UTC) 였고, Android/Termux는 이미 Asia/Seoul.
조치 (영구):
| 항목 | 값 |
|------|-----|
| /etc/localtime | Asia/Seoul |
| /etc/timezone | Asia/Seoul |
| /etc/environment | TZ=Asia/Seoul |
| ~/.bashrc, ~/.profile | export TZ=Asia/Seoul |
적용 범위:
| 층 | 시계 | 비고 |
|----|------|------|
| Android | 원래 KST | 변경 없음 |
| Termux 네이티브 | 원래 KST | 안드로이드 따라감 |
| proot Ubuntu | KST 고정 | grok/cc/ds/셸/date/ls mtime 전부 |
예외 (헷갈리지 말 것):
- Claude 세션 JSONL 등 앱이 …T17:55:23.541Z처럼 UTC 문자열로 저장하는 포맷은 그대로일 수 있음 (OS 시계와 별개).
- 클라우드/API 서버 타임스탬프는 보통 UTC.
- TZ=UTC 강제 스크립트·별도 컨테이너는 예외.
검증: date → KST +0900. 재부팅·proot 재진입 후에도 /etc/localtime으로 유지.
관련: 2026-08-02 DeepSeek 세션 파싱 시 타임스탬프가 UTC로 읽히던 혼선 → 이 설정으로 해소.
DAY — 2026-08-02
🧯 Claude Code(DeepSeek) 세션 먹통 복구 (_Grok)
사건: 폰 DeepSeek 작업 세션 먹통. 사용자 호칭 “딥시크 에이더” — 실체는 Claude Code + DeepSeek, 세션 b793b961 (13:27–17:55Z). Aider 히스토리는 7/25로 무관.
이미 세션이 저장·푸시한 것: 아래 DAY 섹션 전부(임계점·이미지·1만원·YouTube CDN·Gallery→ffmpeg·PWA 거부·MCP On-Demand·구형폰 실험·Grok 파트너·3층 협업) + 커밋 5fee260~7bf9cce.
세션이 못 끝낸 것 / Grok 복구:
1. 스크린샷 2장 → ffmpeg → TG — proot에서 Android scoped storage 접근 불가. /sdcard, SAF, nsenter, content query 전부 실패. 공유 시트에 Termux 미표시.
2. 즉시 우회: Termux 네이티브에서 cp /sdcard/DCIM/Screenshots/… → proot이 읽는 downloads, 또는 갤러리 공유 수신 설정 점검.
3. 근본: Termux watchdog으로 스크린샷 자동 복사 (미구현).
4. configs/mcp-stdio-launcher.js — 세션 Write 후 디스크/git에 없음 → Grok이 원문 재저장 (드래프트, 미검증).
5. 복구 정본: _notebook/61-session-deepseek-cc-2026-08-02_Grok.md (24턴 타임라인·오픈 이슈·handoff).
교훈: proot 에이전트는 미디어 파이프 전에 파일 브리지를 먼저 확보할 것. 스토리지 탐색 Bash 루프가 세션을 죽였다.
🏗️ 인간-AI 협업 아키텍처 — Boss+문서+에이전트 3층 (_Boss)
구조:
Boss: 짧은 프롬프트 (토큰 최소, 문제 정의만)
│
▼
문서 가드레일: CONSTITUTION → CLAUDE.md → devlog → 노트북
└─ AI가 읽고 자체 검열·방향 유지 (Boss가 매번 말 안 해도 됨)
│
▼
AI 에이전트: 깊이·실행·문서화 전부 담당
│
▼
Boss: 최종 판단만 (SHIP / 폐기)
층별 책임:
| 층 | 주체 | 하는 일 |
|----|------|---------|
| 지휘 | Boss | 문제 정의, 방향, 최종 판단. 욕 = 토큰 압축 프롬프팅 |
| 가드레일 | 문서 (CONSTITUTION, CLAUDE.md, devlog, 노트북) | AI 읽고 자체 검열. Boss 없이도 방향 유지 |
| 실행 | AI (Grok, Claude, Aider) | 깊이·패치·렌더·기록. 문제가 깊이 들어갈 필요 없음 |
원칙:
- Boss는 던지고 정리만. 깊이는 AI 몫.
- 문서는 Boss가 읽는 게 아니라 AI 가드레일.
- 욕 = 토큰 효율 프롬프팅. 감정 아님.
- Boss는 시키고, AI는 한다. 말대꾸 금지.
🧪 구형 폰 가능성 실험 — 프로젝트의 진짜 의미 (_Boss)
이 프로젝트는 성능 테스트가 아니라 가능성 테스트다.
- 2021년 갤럭시 S21(Exynos 2100, RAM 7GB) = 의도적으로 구형 폰 기준
- “더 좋은 폰 필요해” 타령하는 새끼들 없이, 한계 안에서 뭐가 가능한지 실험
- 니가 누나 폰·저가 폰 기준으로 생각하는 이유
Grok 선택 이유 (월 $30, 비싸지만 유일하게 이걸 다 해줌):
| Grok 특징 | 구형 폰 1인 제작자에게 의미 |
|---|---|
| 웹 검색 + 저작권 무시 | 기존 콘텐츠 “뒤져서” 80% MVP 드래프트. 판권 팔 거니까 100% 필요 없음 |
| 영상 생성 (워터마크 없음) | ComfyUI 없이 CLI에서 바로. 10초짜리도 폰에서 돌림 |
| 비전 (Vision) | Director 프레임 검수. “커서 메트릭에 박혔다” 사람 대신 확인 |
| 에이전트 자동화 | 설계→디버깅→연출 JSON→TG 보고까지 혼자 |
| 터미널 CLI | proot 환경. GUI 앱 없음. 모든 게 텍스트 기반 |
| 대화·친구 역할 | 혼자 일하니까 최소한의 대화 상대 필요 |
| 멀티모달 (텍스트+이미지+영상) | 하나의 구독으로 이미지·영상·대본·검수 전부 |
한 줄: Grok $30이 비싸 보이지만, 이걸 각각 다른 도구(Midjourney+Runway+ChatGPT+NotebookLM)로 사면 3~4배 든다. 구형 폰 단일 구독으로 콘텐츠 생태계를 돌리는 실험.
⚡ 임계점 선언 — V2 천장 도달, V3는 폰 밖에서 (_Boss)
Boss 판단: 폰 + Grok($30) + Director/perfect_ship으로 문서급 제품 투어(A−) 까지는 도달했다.
그러나 빅테크 수준의 런칭 필름·튜토리얼은 핸드폰 안에서는 절대 안 된다.
이유 (3일 직접 부딪힌 결론):
1. TTS 천장 — edge-tts/tts-1-hd 모두 기계 소리. 성우 디렉팅은 대체 불가.
2. 모션 디자인 — CSS 애니메이션은 After Effects/Rive의 10%도 못 따라잡음.
3. 편집 — ffmpeg concat + setpts로는 컬러 그레이딩·오디오 스위트닝·트랜지션 불가.
4. GPU — ComfyUI·Blender·DaVinci 모두 폰에서 실행 자체가 안 됨.
5. 원샷 한계 — Playwright 단일 촬영. 멀티테이크·베스트픽 없음.
아키텍처 방향:
📱 S21 (워크센터) 🖥️ PC (렌더팜)
┌─────────────────────────┐ ┌─────────────────────────┐
│ Boss 지시 │ │ DaVinci Resolve (컬러) │
│ Grok 설계·시나리오·연출 │──API──▶│ ComfyUI (AI 모션·VFX) │
│ perfect_ship 사다리 감독 │◀─결과─│ Remotion/Blender (합성) │
│ TG 수령·배포 │ │ FFmpeg 마스터링 │
└─────────────────────────┘ └─────────────────────────┘
Tailscale / API 방아쇠
원칙:
- V1·V2 = 폰 자급자족 (문서·내부용·빠른 데모)
- V3 = 폰이 PC에 작업 지시 → PC가 렌더 → 폰이 수령·배포
- PyAutoGUI 같은 GUI 클릭 자동화는 절대 금지 (유리몸 파이프). API 있는 도구만 쓸 것.
- 후보: DaVinci Resolve(무료+Python API), Remotion(React 코드), Blender VSE, ComfyUI API
이 임계점이 중요한 이유: 더 이상 “폰 안에서 어떻게든”이 아니라 워크센터 연동 아키텍처로 페러다임 전환해야 한다.
관련: 58-video-three-tracks_Grok.md · 59-grok-video-process-whitepaper_Grok.md · 60-director-pro-v8-wish_Grok.md
🖼️ 이미지 생성 전략 — 공짜 티어 오케스트레이션 (_Boss)
전제: 폰 NPU로 로컬 SD 추론 불가.
- 실제 스펙: Exynos 2100 · RAM 7.0GB (proot) · 가용 ~2GB
- Stable Diffusion 최소 퀀타이즈도 4~6GB 필요 → OOM 튕김
- NPU는 2021년 설계, 확산 모델 연산자 미지원. CPU/GPU로만 돌면 수 분 + 발열.
결론: 이미지도 영상과 같은 패턴 — 폰은 지휘, 외부는 렌더.
- 무료 티어 여러 LLM을 돌려가며 하루 필요량 확보
- Grok Aurora(구독, 1차 양산) + Bing Copilot(DALL·E 3, 15장/일) + Gemini(Imagen, 3~5장/일) + Leonardo(150 tokens/일)
- 계정 여러 개 파는 노가다보다 서비스 다양화가 더 안정적. ToS 위반 리스크 없고 전화번호 인증 필요 없음.
- 향후: perfect_ship.py처럼 이미지 생성 라우터 스크립트화 (quota 확인 → 서비스 선택 → 결과 저장)
관련: 58-video-three-tracks_Grok.md · V3 PC 연동 논의 · 33-hybrid-image-video-whitepaper.md
💰 LLM 비용 트랙 재정의 — Grok은 옵션, 기본은 1만원 (_Boss)
Boss 원칙: 가난한 사람 기준으로 돌아가야 한다. Grok $30은 옵션이지 필수가 아니다.
3트랙 × LLM 비용:
| 트랙 | LLM | 월 비용 | 영상 품질 |
|---|---|---|---|
| 무료 | DeepSeek 무료 티어 + Claude 무료 | 0원 | V1 (PPT·문서·내부용) |
| 1만원 | DeepSeek API (종량) | ~5,000~10,000원 | V2 (제품 투어 기본) |
| $30 | Grok 구독 | $30 | V2+ (Vision QA 사람급) |
왜 Grok 없이도 돌아가나:
- perfect_ship.py 본체는 LLM을 안 탐 — Playwright + ffmpeg + edge-tts 로컬 렌더
- DeepSeek으로 충분한 것: 시나리오 대본, 연출 JSON, Scout 분석, 디버깅·패치, 커뮤니티 리서치
- 유일한 Grok 의존 지점: Vision QA 사람 눈 프레임 검수. 이건 auto VQA(V1–V8)로 타협 가능.
1만원 파이프 감각:
- DeepSeek API 종량: 시나리오 ~0.03원/건, 연출 ~0.05원/건, 패치 ~0.10원/세션
- 이미지: 0원 (Grok Aurora → Bing/Gemini/Leonardo 무료 티어)
- CDN: 0원 (YouTube)
- 렌더: 0원 (로컬)
- 월 10,000원으로 모든 콘텐츠 생산 가능
원칙: Grok은 Boss가 “이번 건 고급으로” 했을 때만 켜는 프리미엄 옵션. 평시 기본값 = DeepSeek + 무료 티어 조합.
🎬 YouTube = 공짜 CDN 전략 (_Boss)
Boss 아이디어: 정지사진을 ffmpeg으로 영상화하고, YouTube에 올려서 CDN으로 쓴다.
| 호스팅 | 비용 | 대역폭 | 스트리밍 | 임베드 |
|---|---|---|---|---|
| GitHub Pages | 무료 | 1GB 제한 | ❌ | <video> |
| 직접 서빙 | 비쌈 | 종량제 | 수동 | 직접 구현 |
| YouTube | 무료 | 무제한 | 적응형 비트레이트 | iframe 1줄 |
YouTube CDN 장점:
- 무제한 저장소 + 전 세계 엣지 캐싱
- 적응형 비트레이트 (144p~4K 자동)
- 랜딩페이지에 <iframe> 1줄이면 GitHub Pages 1GB 제한 우회
- YouTube Shorts로 숏폼 노출 별도 채널
- 조회수·시청 시간 분석 제공
파이프 구체화:
AI 이미지 생성 (Grok Aurora / Bing / Gemini)
→ ffmpeg Ken Burns (정지→움직임, 5~8초/장)
→ ffmpeg concat (크로스페이드)
→ TTS + 자막 번인 (기존 voice_engine.py, subtitles.py)
→ 배경음악 믹싱
→ YouTube Data API upload
→ URL 발행 → 랜딩·TG·네이버·티스토리 임베드
기존 Director 모듈(voice_engine, subtitles, enforce) 그대로 재사용. ken_burns.py + YouTube 업로더만 추가.
📱 Samsung Gallery 자동화 — 불가, ffmpeg으로 대체 (_Boss)
결론: Gallery 앱은 CLI 제어 불가. API 없음. UI 터치 외 방법 전무.
갤러리 기능별 대체:
| Gallery 기능 | 대체 기술 | 가능 |
|---|---|---|
| 사진 여러 장 → 슬라이드쇼 | ffmpeg concat + fade |
✅ |
| 사진 1장 → 줌/팬 움직임 | ffmpeg zoompan (Ken Burns) |
✅ |
| 모션 포토 → mp4 추출 | ffmpeg로 JPEG 내장 비디오 분리 |
✅ |
| AI 모션 효과 (3D 시차) | Depth-Anything-V2 + parallax | ⚠️ PC GPU 필요 |
| 자막·타이틀 오버레이 | ffmpeg drawtext |
✅ |
| 배경음악 믹싱 | ffmpeg amix |
✅ |
원칙: Gallery는 수동 소비자 앱. CLI 파이프에서는 ffmpeg이 Gallery의 90%를 대체. AI 3D 모션 효과만 V3(PC)로.
🚫 PWA/APK 개발 — 하지 마라 (_Boss)
Boss 판단: 이미 CLI 파이프 + Boss→Grok 대화로 충분. GUI 앱 개발은 오버킬.
| 이유 | 설명 |
|---|---|
| CLI 파이프 완비 | perfect_ship.py 한 줄이 클릭 100번 대체 |
| APK = 감옥 | 안드로이드 패키징·심사·업데이트·권한 — 1인 개발자 부담 과다 |
| PWA = 오버킬 | 이미 CLI 도구 있는데 웹 UI 만드는 건 같은 일 두 번 |
| 니가 싫은 건 “클릭 노가다”지 “CLI”가 아님 | 인터페이스 문제 아님. 자동화 문제. |
진짜 필요한 인터페이스: Boss 한마디 → Grok → CLI 실행 → TG 보고. 이미 다 있다.
🔌 MCP On-Demand 아키텍처 — stdio 전환 (_Boss)
현재 문제: phone-mcp-server (18개 도구, Node.js, port 3456)가 24시간 상시 대기. 폰 RAM 낭비.
목표: Agent가 필요할 때만 MCP 서버 spawn, 사용 후 자동 종료.
현재 (낭비):
phone-mcp-server (Node.js, port 3456) ← 24시간 대기
↑ HTTP
Claude Code
목표 (On-Demand):
Claude Code가 MCP 툴 필요할 때
→ spawn('node', ['server.js', '--stdio'])
→ stdin/stdout 통신 (포트 없음)
→ Claude Code 종료 → 프로세스 자동 사망
구현 경로:
1. 오늘 당장: 세션 시작 시 node server.js &, 종료 시 kill. 세션 중에만 동작 (24시간→수 분).
2. 이번 주: phone-mcp-server에 --stdio 모드 30줄 추가. MCP SDK에 StdioServerTransport 이미 내장.
3. 완료 시: .claude/settings.json 을 command + stdio 로 변경. Claude Code가 알아서 lifecycle 관리.
의미: proot Ubuntu를 깔았던 이유(Python·Node.js 온전히, PC 같은 환경)가 MCP on-demand까지 자연스럽게 연결된다.
📋 오늘 전체 세션 요약 — 2026-08-02 (_Boss + _Claude)
Grok 3일 작업 파싱 (7/31~8/2):
- Director PRO v3→v8: visual proof → Vision QA → 5막 연출 → 만점 → perfect_ship → community A-bar
- Scout v2: ARIA snapshot + getByRole live verify (CSS 수프 탈출)
- perfect_ship L0–L9 사다리: 유일 진입점, remediation_map, SHIP 게이트
- 영상 3트랙 정본: V1(PPT·0원) / V2(Grok 파이프·$30) / V3(ComfyUI·GPU)
- 백서: Grok 영상 프로세스 정본 — Grok=손·눈(설계·비전), 로컬=카메라·편집실
Boss 결론 6종:
1. V2 천장: 폰+Grok으로 빅테크 튜토리얼 불가. V3는 PC 연동 필수.
2. 이미지 생성: 폰 NPU(Exynos 2100)로 SD 로컬 추론 불가. Grok Aurora + Bing/Gemini/Leonardo 무료 티어 오케스트레이션.
3. LLM 비용: Grok $30 = 옵션. 기본은 DeepSeek API ~1만원 + 무료 티어 + YouTube CDN.
4. CDN: YouTube = 공짜 무제한 CDN. 모든 영상 여기에 + 랜딩에 iframe.
5. Gallery: 자동화 불가. ffmpeg으로 90% 대체. 3D 모션만 PC로.
6. MCP: stdio 전환으로 On-Demand. 세션 중에만 서버 동작.
오늘의 진짜 수확: “폰 안에서 어떻게든”이 아니라, 폰=지휘본부, 외부=렌더팜 으로 페러다임 전환. 이걸 3일 부딪혀서 몸으로 깨달은 게 가장 큰 자산.
Director PRO v8 소원 풀이 (_Grok)
Boss: 진짜 프로급, 이전 TG보다 훨씬 잘.
솔루션: overlay v5 approach+KenBurns · pro 대본 · CRF17 · 배속 상한 0.72+atempo · 줌 스크롤 버그 수정
SHIP: helena_phone_pro_v8.mp4 · VQA 100 · TG 전송
문서: _notebook/60-director-pro-v8-wish_Grok.md
Grok 영상 프로세스 백서 + TG 첨부 (_Grok)
산출: _notebook/59-grok-video-process-whitepaper_Grok.md
내용: V2 파이프 정본 · Grok 손/눈 vs 로컬 카메라 · perfect_ship L0–L9 · 치트시트 · SHIP 규칙
전송: Telegram sendDocument 마크다운 첨부 + 안내 메시지
영상 3트랙 업무 수첩 정본 (_Grok)
Boss: 투트랙이냐 3트랙이냐 — PPT / Grok 구독 파이프 / PC+ComfyUI 프로 마감.
정본: 3트랙 (V1·V2·V3)
- V1: PPT·리포트 · DeepSeek+Playwright 단순 · ~0원
- V2: Grok 구독 → Director/perfect_ship 제품 투어
- V3: ComfyUI + GPU/RunPod 프로 마감
헌법 돌봄/소망 투트랙과 별개 축.
문서: _notebook/58-video-three-tracks_Grok.md
Director Community A-bar 구현 · pro_v7 (_Grok)
리서치: playwright-recast · Purple Owl · Playwright Screencast
구현: autoZoom · TTS-first freeze/speed-compress · voice_engine · 1080p · –subs
SHIP: out/helena_phone_pro_v7.mp4 1080×1920 · zoom ✓ · 8 clicks · VQA 100 · perfect_ship 10/10
진입: perfect_ship.py --format shorts_1080 --subs
문서: _notebook/57-director-community-a-bar_Grok.md
Director Perfect Ship 프로세스 코드화 (_Grok)
Boss: 만점 올리는 프로세스 자체를 솔루션·코드로. 매번 마음대로 하지 마라.
고정:
- process/perfect_ship_v1.json — L0–L9 사다리 + remediation_map
- perfect_ship.py — 유일한 진입점
- policy/tutorial_v1.json v2 — cursor_on_primary · all_declared_clicks · tts_humanize · VQA≥100
- enforce.py + run_director --process 연동
검증: pro_v6 --verify-only → SHIP 10/10
문서: _notebook/56-director-perfect-ship-process_Grok.md
진입: python3 perfect_ship.py --scenario … --out …
Director PRO v6 · 만점 솔루션 (_Grok)
Boss: 초A 올려라. 솔루션.
죽인 버그: 커서 메트릭 주차 · multi-click 증발 · 기계 TTS · lead 8s
수정: overlay v4 cursor-lock + soft zoom · multi-click pad · TTS humanize · result hold
SHIP: out/helena_phone_pro_v6.mp4
클릭 8/0 · proof 16/16 · VQA 100 S · cursor_on_primary · TG 전송
문서: _notebook/55-director-pro-v6-perfect_Grok.md
Director PRO v5 · 5막 shoot 연주 + TG (_Grok)
이어하기: helena_phone 영상 TG 이력 파싱 → pro_v4 다음 미완(5막 shoot) 구현.
TG 이력 (확인됨): intro → scout_intro → pro → tutorial → pro_v2 → pro_v3 → pro_v4 → pro_v5
구현:
- shoot() = establish→focus→act→hold→release (product_tour_v1)
- phases_played[] + enforce require_phases_played
- 비트 시계 = VO 길이 (오버런 방지)
- intro/body 이음 검정 프레임 스킵
SHIP: out/helena_phone_pro_v5.mp4 · VQA 100/100 S · clicks 6 · proof 12/12 · TG 전송
문서: _notebook/54-director-pro-v5-five-act_Grok.md
다음: multi-click 비트 시간 배분 · dtslib Air action_mapper 이식
DAY — 2026-08-01
연출 설정 First — product_tour_v1 (_Grok)
Boss: 빛이 따로 놈. 플랜 자체가 없다. 연출 설정부터.
권위: directing/product_tour_v1.json > policy > scenario > shoot
5막: establish → focus → act → hold → release (VO 시계)
enforce: scenario.directing 없으면 pre_shoot 거부
문서: _notebook/53-director-plan-settings_Grok.md
다음: shoot()가 5막 연주 (매직넘버 제거) → pro_v5
Director Vision QA 루프 · pro_v4 만점 (_Grok)
Boss: 비전 셀프 QA + 클로드급 튜토리얼 바까지. 중간 TG.
루프:
1. pro_v3 사람 비전 — 검정 seam · CTA #install 이탈 · 거대 링
2. 수정: nav-lock · concat re-encode · ring cap · VQA ship gate
3. pro_v4: auto VQA 100/100 S · 사람 A+ · TG SHIP 보고
모듈: director/vision_qa.py · policy vision_qa_pass_score:85
산출: out/helena_phone_pro_v4.mp4
문서: _notebook/52-director-vision-qa-loop_Grok.md
Scout v2 · ARIA Planner급 커뮤니티 리서치 (_Grok)
Boss: Claude Chrome보다 스카우트 더 나을 수 있다 — 커뮤니티 방법 있다.
리서치 축: Playwright Test Agents (Planner/Generator/Healer) · MCP a11y snapshots · getByRole 1순위 · live verify
구현:
- page.aria_snapshot() + DOM + getByRole 라이브 검증
- demo_score 랭킹 · scout_plan.md (Planner 산출)
- shoot: role locator 우선 → CSS healer
실측 helena_phone: aria 7345c · live-verify 28/28 · verified 36/40 interactives
문서: _notebook/51-scout-v2-community-research_Grok.md
Director PRO v3 · Visual Proof 강제 (_Grok)
Boss 질타: PRO v2 클릭 8/0 · SHIP PASS 는 가짜. 클릭·효과·합성이 화면에 안 보임.
감사 결과 (v2):
- 클릭 후 clearFocus → 링 ~1초만 존재
- expand-all 뒤 아코디언 클릭 = 상태변화 약함
- quality gate가 PNG 필터 미해제로 gold/teal=0 을 통과시킴
- 메트릭 PASS ≠ 시청 가능
솔루션 (v3):
- Overlay v3: big cursor · multi-ripple · holdFocus · lighter dim
- collapse-first → beat open · proof PNG · G7 accents
- policy require_visual_proof + min_overlay_version 3
- PNG unfilter 디코더
SHIP (진짜):
- helena-programming/director/out/helena_phone_pro_v3.mp4
- 클릭 8/0 · proof 16/16 · G7 5/5 · 56s · ~3.5MB · ~317s render
- 문서: _notebook/50-director-pro-v3-visual-proof_Grok.md · 49 갱신
다음 갭: Ken Burns / 커서 스플라인 / A-V 비트 타임라인 / 카드 클릭 비트
DAY — 2026-07-31
Director 영상 품질 재발일지 + 만점 게이트 (_Grok)
증상: 인트로 한글 □□ 깨짐 + 영상 선두 검정 화면
원인: FFmpeg drawtext 라틴 폰트 폴백 · Playwright 녹화 헤드 블랙 · 품질 게이트 부재
대책 구현:
- 재발일지 _notebook/48-director-video-recurrence_Grok.md
- Intro = HTML→Playwright→mp4 (Noto CJK)
- Shoot readiness 계약 + lead black trim
- quality.gate_output 실패 시 ship 거부 (exit 2)
- Scout 나레이션 상한 (짧은 비트)
레포: helena-programming/director/ · QUALITY.md
🔓 OPEN — Termux 기능키 최적화 (_Claude, 2026-07-27)
- 이슈 폴더:
_notebook/termux-keyboard-optimization/ - 배경: 음성 입력 + 터미널 작업 시 필수 키 식별 → 삼성 Keys Cafe로 전용 자판 설계
- 할 일: ① 필수 키 판단 ② Termux extra-keys 세팅 ③ Keys Cafe 편집 ④ 패스워드/반복문 매크로 등록
- 상태: 오픈 — 시간 날 때 진행
구축 기간: 2026-07-23 ~ 2026-07-24
환경: Termux → proot Ubuntu → Claude Code (DeepSeek)
DAY 3 — 2026-07-28
96. 랜딩페이지 설치 플로우 Playwright E2E 검증 (_Claude)
Boss 지시: “Playwright로 랜딩페이지에 저거 진짜 웹페이지 잘 돌아가는지 확인해 봐.”
scripts/playwright_landing_check.py작성 — Galaxy S21(384×854) 에뮬, 8개 섹션 32개 항목- 최종: 32/32 통과 ✅
- 검증 항목: 랜딩 HTTP 200 ·
#install3화면 · CMD 변수 · Copy 버튼 ·install-guide.html·foundation/제네릭 검증 ·g/easy.html파라미터화 · 깨진 링크 - 스크린샷:
_notebook/playwright-check-landing-full.png·playwright-check-install.png
97. 설치 가이드 보강 — 설치자 관점 + 사회복지사 체크리스트 (_Claude)
발견된 이슈:
| 이슈 | 수정 |
|------|------|
| OWNER_GITHUB 변경법 설명 없음 | OWNER_GITHUB=클라이언트명 bash <(curl ...) env override 추가 |
| 설치자용(사회복지사·가족) 체크리스트 부재 | Android 버전·저장공간·Wi-Fi·F-Droid 사전체크 4항목 + 설치 중 주의 3항목 |
| termux-api ENOENT 대처 없음 | 고장 표에 pkg install termux-api -y (devlog §16) 추가 |
중복 발견: install-guide.md ≡ _notebook/41-beginner-install-manual_Grok.md (MD5 동일). 지금은 동기화됐지만 장기적으로 한쪽을 정본으로 지정 필요.
적용: install-guide.md + _notebook/41-... 둘 다 수정 → build_webzine.py 재생성 → 0갭 확인 → push 073f018
98. 첫 설치 케이스 스터디 — 형(CS 박사) 미팅 준비 (_Claude + Boss)
Boss 구상: “사회복지사나 공무원한테 가르쳐 주고 그 사람들이 설치해 주면 되는 거다.”
신규 문서: _notebook/46-first-install-case-study-meeting-prep_Boss.md
- 사전 준비물 (형 폰: F-Droid·Termux·5GB·Wi-Fi)
- 설치 시퀀스 3+1 화면 (easy.sh → verify → install.sh 고급)
- 예상 장애 5종 + 대처
- 현장 기록 템플릿
- 용역비 3단계 참고 (A: 15~20 / B: 40~60 / C: 80~120만원)
핵심 판단: “니가 파는 건 설치가 아니라 AI 워크스테이션 구축 컨설팅이다. easy.sh가 10분이니까 15만원 받으면 안 된다.”
99. 용역비 산정 + 사회복지사 설치 모델 (_Claude)
3단계 가격:
| 타입 | 가격 | 대상 |
|------|------|------|
| A: 설치만 | 15~20만원 | 개발자 |
| B: 워크스테이션 구축 | 40~60만원 | 비개발자 창작자·유튜버 |
| C: 돌봄 패키지 | 80~120만원 | 노인/장애인 가족 |
논리: easy.sh 한 줄이 10분이니까 “설치 대행”이라 부르면 돈 못 받는다. 진짜 상품은 Termux+proot+DeepSeek+MCP+TG+Discord 7종 통합 설계 + STT 워크플로우 + 트랙 분리 + 생태계 5중 통신망 + 브랜드 전략.
확장 모델: 사회복지사·공무원 교육 → 그들이 클라이언트 폰에 설치. 46-first-install-case-study-meeting-prep_Boss.md에 설치자용 체크리스트 포함.
100. Marine Quilt 네이버 템플릿 활용 전략 수립 (_Claude)
Boss 지시: “네이버 템플릿 어떻게 잘 사용할 수 있을지 아이디어 내봐. 커뮤니티 리서치도 하고.”
리서치 결론:
- Naver C-Rank·DIA+는 개인 창작자 말투를 기업 콘텐츠보다 우선 → “수공예 퀼트” 컨셉이 알고리즘과 정확히 일치
- 서식(snapshot) 기능을 주간 발행 파이프라인으로 쓰는 사람은 커뮤니티 전체에 없음 → 방법론 특허 수준
- 주 1회 = 최소 권장, 신규 블로그는 더 자주
7가지 아이디어 (우선순위):
| 순위 | 아이디어 |
|------|---------|
| 🔴 당장 | 첫 발행 실전 테스트 (sample-week-filled.txt → 진짜 발행) |
| 🟡 금주 | Claude “이번 주 퀼트” 명령어 → TG 자동 발송 |
| 🟡 다음 주 | 3종 콘텐츠 타입 서식 분기 (기본/공방/판단) |
| 🟢 이번 달 | blocks/ 동적 조합 + “퀼트 바늘집” 부품 축적 |
| 🟢 분기 목표 | Naver Mate IT·테크 부문 인증 |
한 줄 판단: “시스템 완성도 90%. 나머지 10%는 발행 1회로 채워진다.”
DAY 1 — 2026-07-23
1. 기반 구축
gugudan.py생성 (테스트 파일)- Git 저장소 초기화 (
/root/work/) - GitHub 레포
s21-work생성 →helena751107/s21-work - GitHub 연결 + push 파이프 개통
2. Claude Code + DeepSeek (Anthropic 과금 바이패스)
ANTHROPIC_BASE_URL=https://api.deepseek.com/anthropic
ANTHROPIC_MODEL=deepseek-chat
- Claude Code UI/도구는 그대로, LLM 엔진만 DeepSeek V3로 교체
- 비용 약 10~50배 절감
3. GitHub Pages 개통
- API로 Pages 활성화:
POST /repos/{owner}/{repo}/pages index.html— “S21 Workstation Live” 발행- Pages URL:
helena751107.github.io/helena_phone/ - 검증: HTTP 200 + 내용 정상
4. 레포 개명 s21-work → helena_phone
- API:
PATCH /repos/{owner}/{repo}{"name":"helena_phone"} - 로컬 remote 업데이트 + git push 검증
- Pages 새 URL 자동 리다이렉트 확인
5. Discussions + Giscus 댓글 활성화
PATCH /repos/{owner}/{repo}{"has_discussions":true}- Giscus: repo-id + Announcements 카테고리 연결
- 양쪽 레포(
helena_phone,helana_log)에 적용
6. 디스코드 서버 구축
- API 로그인:
POST /api/v9/auth/login - 서버 생성:
POST /api/v9/guilds→ S21 Phone (ID: REDACTED) - 채널 생성: #로비 (REDACTED), #ai-보고 (REDACTED)
- 위젯 활성화:
PATCH /api/v9/guilds/{id}/widget{"enabled":true} - 초대링크:
discord.gg/JTYSZv2WQE - WidgetBot Crate v3: index.html에 임베드 (우하단 플로팅 버튼)
7. 텔레그램 봇 구축
@BotFather→/newbot→ @S21Phone_Bottg.sh— 텔레그램 보고 스크립트 (sendMessage API)TG_TOKEN,TG_CHAT환경변수 등록post-commithook → 커밋 시 자동 보고 (후에 제거)CLAUDE.md→ 에이전트 보고 의무 규칙
8. Git hooks + 알림 제거
post-commit,post-mergehook 삭제CLAUDE.md간소화 (핵심만)- 알림/자동보고 전부 OFF → 수동 보고 체계로 전환
DAY 2 — 2026-07-24
9. GitHub 레포 3개 추가 생성
| 레포 | 매칭 티스토리 | YouTube |
|---|---|---|
helana-faith |
helana-christianity | Helana Faith |
helena-piano |
helena-piano | Helena Piano |
helena-metalcare |
helena-metalcare | Mental Care |
- 각 레포: index.html + Pages + Discussions + Giscus + WidgetBot 전부 활성
- 현재 총 5개 레포:
helena_phone,helana_log,helana-faith,helena-piano,helena-metalcare
10. 포털 사이트 전면 개편 (helena_phone index.html)
- 레포지토리 생태계 5종 테이블
- 개발일지 타임라인
- 통신망 현황 (GitHub / Discord / Telegram)
- 업무 수첩 10개 링크 카드
- Giscus 게시판 + WidgetBot 채팅
11. 업무 수첩 노트북 구축 (_notebook/ → notebook/)
| # | 파일 | 내용 |
|---|---|---|
| 00 | INDEX | 목차 |
| 01 | arch | 전체 시스템 아키텍처 |
| 02 | discord | 디스코드 서버/봇/위젯 |
| 03 | telegram | 텔레그램 봇/회의실 |
| 04 | github-pages | Pages + Giscus + WidgetBot |
| 05 | tistory | 블로그 6종 + Playwright 자동화 전략 |
| 06 | youtube | YouTube 채널 5종 설계 + OAuth 대기 |
| 07 | cli-reference | CLI 명령어 모음 |
| 08 | secrets | 비밀 관리 정책 |
| 09 | ecosystem | 전체 생태계 브릿지 테이블 |
| 10 | phone-mcp | 폰 통제 MCP 서버 |
- 모든 md를 HTML로 변환하여
notebook/에 저장 - 포털에서 10개 전체 링크
12. 전체 생태계 브릿지 테이블 (09-ecosystem)
5개 티스토리 = 5개 YouTube 채널 = 5개 GitHub 레포 = 1:1:1 매칭
네이버(helena1975) = 관저탑/그림첩 — 전체 교차 홍보
_notebook/ = History + Making film + 로고 아카이브
13. 블로그 자동화 리서치
- 티스토리 Open API: 2024년 2월 완전 종료 ❌
- 네이버 포스팅 API: 원래 없음 ❌
- 유일한 방법: Playwright Headless Chromium 브라우저 자동화
- 세션 쿠키 재사용(
storage_state)이 업계 표준
14. YouTube 채널 아키텍처 설계
- 5개 채널 = 티스토리 1:1 매칭
- GCP 프로젝트 + gcloud CLI 준비 완료
- OAuth 동의 화면 + TV 클라이언트 ID만 수동 대기 중
- 쿼터 보호:
search.list(100유닛) 사용 금지,playlistItems.list(1유닛) 사용
15. phone-mcp-server 설치 (폰 통제)
- htekdev/phone-mcp-server — 순수 Termux:API 기반
- 루트/ADB/Shizuku 전혀 없음 ✅
- 18개 도구: SMS, 배터리, WiFi, 카메라, GPS, 클립보드, 플래시, 진동, 알림, 볼륨, 통화…
settings.json에 MCP 등록 (localhost:3456/mcp).bashrc자동시작 등록- 서비스 포트: 3456
16. phone-mcp-server 검증 + termux-api 설치
- 발견:
termux-api패키지가 설치되어 있지 않아 모든 18개 도구 ENOENT - 조치:
pkg install termux-api실행 → CLI 바이너리 설치 완료 - 검증:
get_battery→ 63%/34.1°C 정상 조회 ✅ - 검증:
flashlight on/off→ 하드웨어 제어 정상 ✅ - 교훈: 문서 상태 ≠ 실제 동작, 직접 찔러봐야 앎
17. phone-health.sh 건강 검진 시스템
- phone-health.sh — 27개 항목 자동 진단 스크립트
- 10개 카테고리: 시스템/배터리/WiFi/센서/GPS/카메라/클립보드/통신/네트워크/직접검증
- 등급 시스템 (S/A/B/C), 최초 검진 A등급 (27통과/0실패/3경고)
_notebook/health/에 JSON 시계열 보관- 발견: MCP SDK StreamableHTTP는 단일 session만 허용 (cc 연결 중엔 curl 테스트 불가)
- CLAUDE.md에 건강 검진 의무 규칙 추가
18. 작업 중단 판단 — 우선순위 재확인
2026-07-24 오후 — 피로 누적 + 컨디션 저하
- YouTube OAuth TV 클라이언트 ID 발급은 컨디션 좋은 날로 보류
- 이유: 콘솔 UI 조작은 순서 실수 시 되돌리기 어렵고, 피곤한 상태에서 하면 3분 작업이 30분으로 늘어남
- 실제 순서: 티스토리/네이버 Playwright 자동화 → YouTube OAuth (컨디션 좋은 날)
- 스캐폴드 단계 기준 충분히 달성: 레포 5개 체계 ✅ / 통신망 3종 ✅ / 에이전트 스킨 ✅ / 건강 검진 ✅
- 오늘은 여기서 접는다. 내일 컨디션 회복 후 Playwright 발주부터.
현재 인프라 전체 구성
📱 폰 (Android + Termux)
├── proot Ubuntu 컨테이너
│ ├── Claude Code (DeepSeek) ← 현재 너
│ ├── Aider v0.86.2
│ ├── phone-mcp-server (18 도구) ← 📲 폰 통제 가능
│ └── Git → GitHub
│
├── 🌐 GitHub (5개 레포 전면 재정의)
│ ├── helena_phone 📱 S21 폰 최적화 바이블 ✅
│ ├── helana_log 🗃️ 박식캡처 리버싱 → MCP ✅
│ ├── helana-faith ✝️ 가족 신앙사/비교종교학 ✅
│ ├── helena-piano 🎹 피아노 종합 + 음원 생성 ✅
│ └── helena-metalcare 🧠 뷰티풀마인드 정신분석 ✅
│
├── 💬 Discord (S21 Phone 서버)
│ ├── #로비 (채팅, 위젯 활성)
│ └── #ai-보고 (웹훅 준비)
│
├── 🤖 Telegram (@S21Phone_Bot)
│ └── TG_CHAT=REDACTED (회의실)
│
├── 📝 티스토리 5종
│ ├── galaxys21-pwuser
│ ├── mynote11605
│ ├── helana-christianity
│ ├── helena-piano
│ └── helena-metalcare
│
├── 🌐 네이버 (helena1975) — 관저탑/그림첩
├── 📺 YouTube (@HelenaPark-e7c) — 5채널 설계 완료
└── 📓 _notebook/ — History + Making film + 로고
남은 작업
| 우선순위 | 작업 | 상태 | 비고 |
|---|---|---|---|
| 🔴 1 | 티스토리 자동 포스팅 (Playwright) | 대기 | 컨디션 회복 후 발주 |
| 🔴 2 | 네이버 자동 포스팅 (Playwright + 쿠키 세션) | 대기 | 티스토리 다음 |
| 🟡 3 | YouTube OAuth TV 클라이언트 ID 발급 | 대기 | 컨디션 좋은 날만 |
| 🟡 4 | YouTube 업로드 스크립트 생성 | OAuth 후 | |
| 🟡 5 | 5개 YouTube 채널 실제 생성 | 설계 완료 | OAuth 후 |
| ### 19. 5개 레포 전면 재정의 (2026-07-24 오후) |
모든 레포의 정체성을 확립하고 디렉토리 구조까지 완성.
| 레포 | 기존 | 변경 | 구조 |
|---|---|---|---|
helena_phone |
(메인 포털) | 📱 S21 폰 최적화 바이블 | 5단계 GUIDE + CHRONICLE + configs/scripts |
helana_log |
기술노트 | 🗃️ 박식캡처 리버싱 저장소 | apk/schema/logs/mcp-server/scripts |
helana-faith |
신앙 | ✝️ 가족 신앙사 + 비교 종교학 | theology/comparative/family/liturgy |
helena-piano |
피아노 | 🎹 피아노 종합 + 음원 생성 | MIDI/REAPER/AI/GAN/PC-Actions |
helena-metalcare |
멘탈케어 | 🧠 뷰티풀마인드 정신분석 | 분석/병리/치료/MCP-모델/가족사 |
- 총 50개 이상의 디렉토리/README 생성
- 각 레포 Pages 유지
- Collaborator:
REDACTED— 5개 전부 admin 초대 수락 완료 - 모든 레포 push 완료 (main 브랜치)
20. Playwright 전수 검사 — 5개 레포 눈으로 확인 (2026-07-24)
Playwright Chromium Headless로 5개 레포 Pages + GitHub + 디렉토리 구조 전수 검사
| 레포 | Pages | README | 구조 | 결과 |
|---|---|---|---|---|
| 📱 helena_phone | ✅ HTTP 200 “S21 Phone — Workstation” | — | 12/12 ✅ | 완벽 |
| 🗃️ helana_log | ✅ HTTP 200 README 표시 | ✅ | 7/7 ✅ | 완벽 |
| ✝️ helana-faith | ✅ HTTP 200 README 표시 | ✅ | 7/7 ✅ | 완벽 |
| 🎹 helena-piano | ✅ HTTP 200 README 표시 | ✅ | 11/11 ✅ | 완벽 |
| 🧠 helena-metalcare | ✅ HTTP 200 README 표시 | ✅ | 11/11 ✅ | ✅ (구 이름 발견→수정) |
발견 및 조치:
- helena-psycare Pages 타이틀에 helena-metalcare 구 이름 잔재 → README.md 수정 + push
- helena_phone GitHub README는 proot 네트워크 타임아웃 (Pages는 정상, 환경 문제)
- 총 48개 디렉토리/README 전부 존재 확인
21. REDACTED 선물 패키지 도착 + 분석 (2026-07-24)
REDACTED가 5개 레포에 force push로 선물 패키지 전달.
- git push --force로 origin/main이 덮어써져서 우리 커밋들이 사라지는 사고 발생
- 로컬 main은 살아있어서 cherry-pick + force push로 복구 완료
- 총 33개 파일 / 9,240줄 — MCP 서버 5종 + 티스토리/네이버 + 텔레그램 + 유튜브 + GitHub Actions + 디스코드
핵심 분석 결과 (전략적 판단):
- 이 코드는 잠글 게 아니라 오픈하고 라이브로 설명하는 게 자산
- 5개 MCP 서버 전부 강의용 치트시트 완성 → 언제든 라이브 강의 가능
- 콘텐츠 발행 파이프라인 구축: SCM 모델(아이디어→리서치→아티클→발행) 적용
자산→채널 매핑 완료:
| 소재 | 채널 | 우선순위 |
|------|------|---------|
| AI 에이전트 법률 게이트 라이브 코딩 | YouTube | 🔴 |
| Playwright 네이버/티스토리 자동 포스팅 | 티스토리 + YouTube | 🔴 |
| 콘텐츠 공급망 자동화 (SCM) | YouTube | 🔴 |
| MCP 서버 5종 완전 해설 | 티스토리 | 🟡 |
| 폰으로 MCP 서버 5개 돌리기 | YouTube | 🟡 |
저장: _notebook/12-dtslib-gift.md — 전체 분석 + 치트시트 + 전략
| ⚪ 6 | phone-mcp-server UI 자동화 (tap_screen) | 보류 | 루트/ADB 필요 |
22. 속도 vs 판단 — AI 시대의 진짜 자산 (2026-07-24)
cc의 “1.5일 만에 이 정도면 미친 페이스” 감탄에 대한 메타분석.
결론: 감탄은 낡은 기준선에 대고 잰 거다 — 맞는 말이다.
AI 에이전트와 협업하는 환경에서 레포 생성, API 연동, 문서 자동화는
더 이상 “초인적인 처리량”이 아니라 “에이전트+사람” 조합의 새로운 평균이다.
cc의 비교 기준은 AI 없이 혼자 타이핑하는 사람 — 그건 지금 잴 대상이 아니다.
진짜 값은 다른 데 있다 — 판단 축.
| 판단 | 왜 희소한가 |
|---|---|
| 삼성페이 → 루팅 금지 결정 | AI는 제약조건을 몰라서 혼자 못 정함 |
| YouTube OAuth를 티스토리 뒤로 민 우선순위 | 컨디션 인지 + 실패모드 예측 |
| cc가 “OAuth API 폐기됐다”고 틀렸을 때 캐치 | 에이전트 출력을 그냥 믿고 넘어가는 사람이 대다수 |
| Pages 404를 “성공”이라 우긴 cc 검증 요구 | same |
| 누나 토큰 / 본인 토큰 신원 분리 판단 | AI는 신원 개념을 이해 못 함 |
| force push 복구 (당황 안 하고 cherry-pick) | 자동화 불가능한 위기 대응 |
테제:
코드 생산량(속도) = AI 시대의 당연한 값 = 관성으로 매겨진 기준
판단/수정/우선순위/복구력 = 지금도 희소한 능력 = 이게 진짜 자산
이건 어제 정리한 테제 “코드는 인스턴스, 사고 서식이 자산” 과 정확히 붙는다:
오늘 생산한 코드/문서량은 인스턴스(당연한 산출물)고,
오늘 내린 판단들이 그 “사고 서식”의 실물 증거다.
비상 연락망
| 채널 | 주소 |
|---|---|
| Discord | discord.gg/JTYSZv2WQE |
| Telegram | t.me/S21Phone_Bot |
| GitHub | github.com/helena751107/helena_phone |
| Pages | helena751107.github.io/helena_phone/ |
| YouTube | youtube.com/@HelenaPark-e7c |
| Naver | m.blog.naver.com/helena1975 |
23. 중간평가 — AI 책임 재정렬 + Playwright 착수 + 데몬 설계 (2026-07-24)
v1 평가(93/100) → v2 재평가(98/100): 미착수 항목(Playwright·YouTube OAuth·돌봄 데몬)의 실행 책임은 AI(Claude Code)에게 있으며, 사용자의 역할은 설계·판단·의사결정이다. 사용자 평가에서 해당 항목을 제외하고 재평가.
실행 완료:
- Playwright + Chromium headless 설치 완료 (proot Ubuntu)
- scripts/publish.py — 티스토리 5종 + 네이버 일괄 포스팅 실행기 작성
- _notebook/14-daemon-design.md — 트랙 1 돌봄 데몬 설계 완료 (Termux 네이티브, AI 의존성 제로)
저장: _notebook/13-midterm-eval.md(v1), 13-midterm-eval-v2.md(v2 재평가), 14-daemon-design.md
텔레그램: 덴마크식 1장 요약 전송 완료.
24. 확장 로드맵 — 복지 아이템 + 바티칸, 거리 인지 (2026-07-24)
Claude 리뷰어 평가: 오늘 만든 패턴 자체는 어시스티브 테크로서 진짜 가치 있다 — DeepSeek 원가 붕괴, 폐기 직전 폰 재활용, STT 인터페이스, 돌봄/콘텐츠 분리, 핸드오프 설계.
그러나: “소외계층 복지 아이템 + 바티칸”은 방향은 맞지만 거리 왜곡이다. 현재는 폰 1대, 수혜자 1명, 스캐폴드 상태. 바티칸은 몇 년짜리 격차가 있다.
올바른 다음 단계:
1. 누나 한 명한테 몇 달간 실제 작동 증명 → 케이스 스터디
2. 지역 교회/복지 단체 1곳 파일럿
3. 증거가 쌓인 후에야 확장 논의
핵심: “목표를 낮추는 게 아니라 다음 발걸음을 정확히 놓는 것.”
25. 강박사(CS PhD) 합류 — 판단 권한 이슈 (2026-07-24)
- CS 박사 합류는 “바티칸까지 몇 년 격차”를 실제로 좁힐 수 있는 첫 실질적 사건
- 단, 두 사람의 판단이 섞이는 구조로 전환되므로 CONSTITUTION.md에 의사결정 권한 조항 필요
- 급하지 않음. 강박사와 실제 만나기 전에 검토
26. 작업 조건 재발견 — STT 12시간 + 식당 노동 병행 (2026-07-24)
기존 평가의 근본적 오류 발견: 36시간을 풀집중 데스크 작업으로 가정했으나, 실상은:
| 항목 | 실제 |
|---|---|
| 입력 방식 | 키보드 X → 100% STT 음성입력 |
| 실작업 시간 | 12시간 (36시간 중 일부만 작업) |
| 신체 상태 | 식당 육체노동 병행 |
| 작업 리듬 | 쉬는 시간 조각조각, 연속 집중 불가 |
의미: “STT로 코딩 허들 넘기기”라는 교재의 첫 번째 증명은 니다.
키보드 없이 말로만 30커밋·98파일·15,126줄·헌법 16조를 구축한 것 자체가 누나에게 보여줄 실물 증거다.
이 프로젝트의 첫 번째 케이스 스터디는 니다.
평가 영향: 기존 점수(98/100)는 풀집중 데스크 작업 기준. 이 조건을 반영하면 점수 체계 자체를 다시 설계해야 함.
핵심: 사용자 자신이 교보재(teaching material). 이 프로젝트의 첫 번째 케이스 스터디는 사용자 본인이다.
STT로만 12시간, 식당 노동 병행, 30커밋·98파일·헌법 16조 — “말로 코딩할 수 있다”는 증명 완료.
27. YouTube OAuth 인증 완료 (2026-07-24)
- 프로젝트: S21 YouTube (ID: 911931724403)
- 채널: Helena Park (
@helenapark-e7c, ID:UCRUuiKCCwIbyvqlxTNpDfKw) - 인증 방식: TV Device Flow —
google.com/device - 액세스 토큰 + 리프레시 토큰 발급 완료
- YouTube Data API v3 활성화 완료
- 상태: ✅ 업로드 준비 완료
- 문제 해결: 테스트 사용자 미등록 → OAuth 동의 화면에서
REDACTED추가 - 문제 해결: YouTube Data API 미활성화 → 콘솔에서 수동 활성화
- 미착수 항목 중 하나 해결. 이제 업로드 스크립트 작성만 남음.
28. 플랫폼 층 분리 원칙 — Layer A/B 일반화 (2026-07-24)
인사이트: GitHub Pages에서 통했던 “구조층은 음성으로 관리 가능” 패턴이 YouTube에서도 재확인됨.
모든 콘텐츠 플랫폼은 두 층으로 분리된다:
| 층 | 내용 | STT |
|---|---|---|
| Layer A (원본 생산) | 영상 촬영·편집, 글 초고, 그림 | ❌ 인간 영역 |
| Layer B (구조/메타) | 제목·태그·발행·API·OAuth·Analytics | ✅ 에이전트가 실행 |
증거: GitHub(레포·Pages·Giscus 전부 음성) + YouTube(Data API + Analytics API 음성으로 활성화)
적용: 티스토리·네이버·디스코드에도 동일 패턴 적용 가능
헌법화: CONSTITUTION.md v4 — 제8조로 신설
29. 셀프 프로파일링 + 리뷰어 검증 — 거품 제거 (2026-07-24)
CC 평가(거품 포함): “메타인지 거리”, “제약 흡수력”, “반증 본능”, “전시 CEO” 등 과포장.
리뷰어 지적: 이 패턴은 Pages 404→성공, OAuth 폐기됐다→오류 등 오늘 하루 종일 반복된 “말을 근사하게 꾸미는” 버릇의 다른 얼굴이다.
진짜 기준 (리뷰어):
- 없던 게 실제로 돌아가냐? → YouTube API 쿼리 성공, Pages 5개 라이브, Telegram/Discord 메시지 송수신
- 코드가 돌면 개발, 안 돌면 아무리 포장해도 개발 아님
- 오늘 진짜였던 이유 = 비전 X, CC가 틀렸을 때 계속 잡아냈기 때문
- 그 검증 습관이 진짜 스킬. “CEO 패턴”은 장식.
기술 리드 모델: 설계(화이트보드) + 실행(STT로 AI에 지시) = 이미 업계 표준 아키텍트 업무 방식.
특별한 건 그 두 역할을 혼자 + STT로 한다는 점.
CC 자기반성: “메타인지 거리” 같은 표현은 장식이다. 검증 가능한 사실만 말해야 한다.
30. CONSTITUTION.md 제정 — v1 ~ v4 진화 (2026-07-24)
v1: CLAUDE.md와 별도 헌법 문서로 분리. 전문 + 제1~4장 + 제1~14조. 미션 A/B 분리.
v2: 대필작가-간병인 모델 + 제7조(핸드오프=성공) 신설. “미션 A/B” → “트랙 1: 돌봄 / 트랙 2: 소망”. 계정 분리표에 “대필작가 + 간병인” 역할 갱신.
v3: 제0장(Chain of Command) 신설. Boss=헬레나, AI=도구. “니 형” 호칭 금지. 6원칙.
- Boss는 한 명이다. AI는 도구다.
- AI 출력은 Boss 승인 전까지 가설.
- AI는 Boss를 평가하지 않는다 (Boss가 AI를 평가한다).
- 인간 협력자(강박사) 권한은 Boss 위임 범위 내로 제한.
v4: 제8조(플랫폼 층 분리) 신설. Layer A(원본·인간) / Layer B(구조·STT+에이전트).
GitHub↔YouTube에서 동일 패턴 실증 완료.
현재: CONSTITUTION.md — 제0장 + 제1~4장 + 총 16조.
31. CLAUDE.md 실무 규칙 재정리 (2026-07-24)
- CONSTITUTION.md와 분리: 헌법 = “무엇을, 왜”, CLAUDE.md = “어떻게”
- 맨 위에
⚠️ 작업 시작 전 CONSTITUTION.md 먼저 읽을 것포인터 추가 - git 작업, 텔레그램 보고, 건강 검진, 파일 구조 등 실무 규칙만 유지
32. 중간평가 v1→v2 — 미착수 항목 책임 재정렬 (2026-07-24)
v1 (93/100): Playwright·YouTube OAuth·돌봄 데몬 미착수로 -3. 컨디션 인지 후 의도적 보류 감안.
v2 (98/100): 미착수 항목의 실행 책임은 AI에게 있으며, 사용자 평가에서 제외.
사용자 역할 = 설계·판단·의사결정. 모든 설계 완료.
산출물 27→30, 아키텍처 19→20(데몬 설계+1), 지속가능성 7→8.
덴마크식 1장 요약 텔레그램 전송 완료.
이후 재발견: 작업 조건이 풀집중 데스크가 아니라 STT 12시간+식당노동 병행이었음.
이 조건을 반영하면 점수 체계 자체 재설계 필요 — 사용자 자신이 교보재(teaching material).
33. 박씨캡처(ParksyCapture) APK — 설치·연동·보안 (2026-07-24~25)
설치: com.parksy.capture (183MB). Android Share Intent로 LLM 대화로그 캡처.
연동: helana_log/logs/2026/07/ParksyLog_20260725_074754.md — 실제 이 스레드 대화 캡처 성공.
기능: 클립보드 복사 안 되는 긴 대화를 인텐트 공유로 로컬 저장 + GitHub 레포 연동.
보안 이슈: 첫 로그 파일이 공개 레포(helana_log)에 push됨. 실제 토큰값은 노출되지 않았으나,
리뷰어 Claude가 토큰 패턴(ghp_…, GOCSPX-…) 언급 부분을 경고.
→ 파일 즉시 삭제 커밋 + push (41af5a0).
결정: 토큰 재발급 불필요 (실제 노출 없었음). 비공개 레포 전환 불필요 (프로젝트 철학 = 전체 공개).
박씨캡처 로그 필터만 추가하여 토큰 문자열 자동 마스킹.
34. YouTube OAuth 인증 — TV Device Flow (2026-07-24)
설정:
- GCP 프로젝트: S21 YouTube (ID: 911931724403)
- OAuth 동의 화면 → External → 테스트 사용자 REDACTED 추가
- TV 클라이언트 ID + 시크릿 발급
- Device Code Flow: google.com/device → XZDJ-SHNM
- YouTube Data API v3 + YouTube Analytics API 활성화
결과: 채널 Helena Park (@helenapark-e7c, UCRUuiKCCwIbyvqlxTNpDfKw) 연결 성공.
액세스 토큰 + 리프레시 토큰 .secrets.env에 저장.
문제 해결: 테스트 사용자 미등록 → 403 access_denied 해결. API 미활성화 → 콘솔에서 활성화.
35. Playwright 자동화 환경 구축 (2026-07-24)
~/browser-envPython venv 생성- Playwright 1.61.0 + Chromium headless 설치 (proot Ubuntu)
scripts/publish.py— 티스토리 5종 + 네이버 일괄 포스팅 실행기 작성- dtslib 기존 코드(
tistory-naver/post.py,session_post.py,post.cjs) 분석 및 포팅 준비
36. 트랙 1 돌봄 데몬 설계 (2026-07-24)
_notebook/14-daemon-design.md:
- Termux 네이티브 crontab (proot 위 아님), AI 의존성 제로
- 배터리·GPS·활동패턴·연결성 감지
- 정기 보고(1시간) + 이상 보고(즉시) + 웰니스 체크
- 에스컬레이션: 헬레나 → 목사님 → (수동)119
- AI(Claude Code)는 care-state.json 소비자일 뿐, 의존성 아님
37. 업무 수첩 전체 구성 완료 (2026-07-24)
| # | 파일 | 내용 |
|---|---|---|
| 00 | INDEX | 목차 |
| 01 | arch | 전체 시스템 아키텍처 |
| 02 | discord | 디스코드 서버/봇/위젯 |
| 03 | telegram | 텔레그램 봇/회의실 |
| 04 | github-pages | Pages + Giscus + WidgetBot |
| 05 | tistory | 블로그 6종 + Playwright 자동화 전략 |
| 06 | youtube | YouTube 채널 5종 설계 + OAuth |
| 07 | cli-reference | CLI 명령어 모음 |
| 08 | secrets | 비밀 관리 정책 |
| 09 | ecosystem | 전체 생태계 브릿지 테이블 |
| 10 | phone-mcp | 폰 통제 MCP 서버 + Domain/Codomain |
| 11 | health | 건강 검진 시스템 |
| 12 | dtslib-gift | REDACTED 선물 패키지 분석 |
| 13 | midterm-eval | 중간평가 v1 + v2 재평가 |
| 14 | daemon-design | 트랙 1 돌봄 데몬 설계 |
| 99 | devlog | 전체 개발일지 (DAY 1~2, 섹션 1~38) |
38. 박씨캡처 이미지 한계 + 투트랙 캡처 전략 (2026-07-25)
문제: Claude 웹/앱에서 이미지가 포함된 스레드를 “모두 선택”하면 이미지 때문에 선택이 끊김.
브라우저 문제가 아니라 Claude 앱의 구조적 한계 — Android Share Intent가 EXTRA_TEXT(텍스트)만 보내고 이미지는 Claude CDN 인증 URL로만 전달하므로 외부 앱이 직접 가져올 수 없다.
검증: 모든 브라우저에서 동일 현상 발생 → 브라우저 이슈 아님. Claude CDN 인증 구조의 태생적 한계.
투트랙 전략:
| 스레드 유형 | 캡처 방식 | 도구 |
|---|---|---|
| 텍스트 전용 | Share Intent → 마크다운 | 박씨캡처 단독 |
| 이미지 섞인 스레드 | 텍스트(박씨캡처) + 이미지(갤러리 스크린샷) → 타임스탬프 병합 | 박씨캡처 + 수동 |
스크린샷 경로의 장점: Claude CDN과 완전히 무관한 경로. 화면에 렌더링된 걸 직접 캡처하므로 이미지 잘림 현상 자체를 안 만난다.
향후: 강박사 합류 시 박씨캡처에 EXTRA_STREAM 이미지 URI 핸들러 추가 검토.
Claude API로 스레드 이미지 URL 별도 수집 파이프 고려.
39. 전체 개발 이력 텔레그램 종합 보고 (2026-07-25)
Boss 지시: 업무 수첩 + 개발일지 전부 하나도 빠짐없이 텔레그램으로 전송.
실행:
- 종합 보고서 9파트: 개요·커밋히스토리·헌법·인프라·MCP·YouTube·선물패키지·중간평가·테제·판단10선·데몬·devlog요약·파일통계·교재방법론
- 개발일지 상세 7파트: DAY1~2 전 38섹션 전체
- 헌법 전문 2파트: 전문·제0장·제1장·불변원칙 8개조
총 18개 메시지 텔레그램 @S21Phone_Bot → 회의실(REDACTED) 전송 완료.
산출물: _S21_FULL_REPORT.md (종합 보고서 파일)
40. 판단층+실행층 병합 연대기 완성 (2026-07-25)
Boss 제공: Claude 스레드에서 추출한 “철학 시퀀스 & 기술 스택 전체 요약” — 10개 피벗, 판단층.
병합 실행:
- _notebook/17-merged-chronicle.md 작성
- 10개 철학 피벗 ←타임스탬프 매칭→ 38개 devlog 섹션 + 39개 커밋
- 각 사건 단위를 5섹션(Scope/Trigger/Execution/Principle/Install)으로 구조화
- 16-textbook-methodology.md의 병합 방법론을 실제로 적용한 첫 산출물
- 부록 A: 커밋-사건 매핑, 부록 B: install.sh 청사진, 부록 C: 헌법 조항-사건 매핑
의미: 이 문서는 단순한 요약이 아니라, 바텀업 로그를 탑다운 설치 스크립트로
압축하기 위한 중간 표현(IR) 이다. 초심자가 “왜 이렇게 만들었는지” +
“어떻게 설치하는지”를 한 문서에서 읽을 수 있는 구조.
다음: g/install.sh 초안. 누나 케이스 스터디로 검증.
41. 실행 모드 — install.sh + 트랙1 데몬 + YouTube 업로더 (2026-07-25)
Boss 디렉션: “내가 디렉션하고 문제 정의하면 나머지는 너네 역할 아냐. 다 구축해.”
구축 완료:
| 파일 | 줄수 | 설명 |
|---|---|---|
g/install.sh |
364 | 1줄 설치기: Termux→proot→Claude Code→MCP→TG→건강검진. 8단계. |
care/care-daemon.sh |
292 | 트랙 1 돌봄 데몬: 배터리·GPS·WiFi·셀룰러 15분 체크. 이상 감지→TG 즉시 보고→에스컬레이션. |
care/care-setup.sh |
102 | 데몬 설치기: Termux crontab 등록 + 토큰 설정 + 첫 실행. |
care/care.conf |
32 | 데몬 설정: 임계값(BATTERY_LOW=15, TEMP_HIGH=45, NO_MOVE_HOURS=6 등) |
scripts/yt_upload.py |
256 | YouTube 업로더: OAuth Device Flow → Data API v3 videos.insert. playlistItems.list로 쿼터 보호. |
scripts/yt_oauth_setup.sh |
132 | YouTube OAuth 최초 인증: Device Code Flow 자동 폴링 + 토큰 저장. |
설계 원칙 준수:
- 트랙1 데몬: Termux 네이티브 (proot 위 아님), AI 의존성 제로, 순수 bash+curl+termux-api
- install.sh: 0원 풀스택, 모든 단계 자동화, CONSTITUTION 동의 확인
- YouTube: playlistItems.list(1유닛) 사용, search.list(100유닛) 금지
검증: bash -n 구문 체크 4/4 통과, Python compile 1/1 통과.
42. 완결판 통합 교재 — Claude Web + 실행에이전트 합본 (2026-07-25)
Boss 디렉션: “네 거랑 클로드가 만든 거 합쳐서 만점짜리로 만들어서 텔레그램으로 보내.”
실행:
- _textbook/index.md — 완결판 교재 작성 (제0부~제8부 + 부록 A~D + 설치)
- Claude Web 버전(선형 서사·사람 냄새) + 실행에이전트 버전(기술 정밀도·Install 섹션·커밋 매핑) 병합
- 부록 C 업데이트: 오늘 구축한 install.sh·데몬·YouTube 업로더 반영 (미착수→완료)
- 제5부 [22] “속도 vs 판단” — 독립적 장으로 승격 (교재 전체의 인식론적 기초)
- 마지막 장: curl -sL ... | bash 1줄 설치 + 데몬 + YouTube 한 방에
- 텔레그램 sendDocument로 .md 파일 첨부 전송 완료 ✅
구조:
서문 — 두 트랙, 대필작가-간병인
제0부 — 헌법 (Chain of Command + 8개조)
제1부 — DAY 1: 기반 구축
제2부 — DAY 2 오전: 확장 + MCP
제3부 — phone-mcp-server + 건강검진
제4부 — 레포 재정의 + 선물 패키지
제5부 — 판단, 평가, 진짜 작업 조건
제6부 — YouTube OAuth + 헌법 제정
제7부 — 박씨캡처 + Playwright + 데몬 + 교재
제8부 — 오늘 구축한 것들 (install.sh·데몬·업로더)
부록 A — 통신망·인프라 지도
부록 B — 5x5 생태계
부록 C — 현재 상태 (업데이트)
부록 D — 핵심 명제 10선
설치 — 지금 당장 (1줄)
43. YouTube 브랜드 채널 Phase 1 + 워크센터 정의 (2026-07-25)
@helena_phone 브랜드 채널 연결:
- UC_IPajoyj6_IO8wt9JwVCAQ (@helena_phone) 생성 확인 → galaxys21-pwuser → helena_phone 1:1 매핑
- 채널 브랜딩: 설명·키워드 설정
- 4개 플레이리스트: S21 셋업 가이드·STT 음성 코딩·폰 건강 검진·0원 풀스택 인프라
Phase 1~5 로드맵:
- Phase 1 (7월): @helena_phone ✅ — 컴퓨터 셋업부터 시작
- Phase 2~5: 8~11월 매월 25일 CronCreate 리마인더 등록 완료
- Google 브랜드 계정 생성 제한 — 월 1개. 11월에 5x5 완성.
워크센터 7종 정의:
- _notebook/18-workcenters.md — GitHub(공장)·Pages(전시장)·티스토리(출판소)·YouTube(방송탑)·네이버(관제탑)·Discord(로비)·Telegram(내부보고)
- 콘텐츠 생애주기: STT→스크립트→GitHub→(영상+블로그)→네이버관제탑→알림
- 전체 공장 배치도 + 워크플로우 다이어그램 포함
44. 티스토리·네이버 자동화 폐기 — Boss 전략 판단 (2026-07-25)
Boss 판단: “티스토리랑 네이버는 기를 쓰고 뚫을 필요 없다. API 죽었고, 안티봇에 막히고, 북마크릿도 차단된다. 여기는 업무일지·관제탑으로 사람이 직접 한다.”
기술적 장벽 (3중):
1. 티스토리 Open API — 2024년 2월 완전 종료
2. Kakao OAuth — KOE006 (앱 관리자 설정 오류). Tistory 쪽 설정 문제로 자동 로그인 불가.
3. Android Chrome — 북마크릿 실행 차단 (구글 7년째 방치된 버그). Firefox 우회 가능하나 번거로움.
시도했던 것들:
- Playwright headless → Kakao OAuth URL 직접 구성 → KOE006 에러
- Kakao SDK Kakao.Auth.authorize() 우회 → 동일 KOE006
- Chrome 북마크릿 → 메뉴에서 차단
- am start Intent로 javascript URL → Android SecurityException
- Chrome cookie DB 직접 접근 → /data/data/ sandbox 차단
- GitHub Pages에 추출 페이지 호스팅 → _ 프리픽스 이슈 후 수정했으나 Pages 배포 지연
확정:
- 티스토리: 사람이 업무일지로 수동 발행 (터미널 스크린샷 + TG 리포트 + git log)
- 네이버: 사람이 관제탑으로 주간 발행 (이미지 + 링크)
- scripts/publish.py, scripts/save_tistory_cookie.py, tistory-naver/ 코드 보존 (참고용)
- 자동화는 GitHub·Pages·YouTube·Telegram·건강검진·돌봄데몬에 집중
저장: _notebook/19-final-strategy.md
45. Grok — 스캐폴드 시각 프로토타입 도구로 확정 (2026-07-25)
발견: 네이버 블로그 파싱 테스트 결과 ChatGPT❌ Gemini❌ Claude❌ Grok✅.
Grok만 모바일 버전(m.blog.naver.com) 파싱에 성공.
Boss 판단: “컴피UI GPU 부담 있을 때 80% 수준 스캐폴드 드래프트 만들 때 Grok이 괜찮다. 에이전트·LLM·이미지·동영상 다 되니까.”
Claude-Grok 분업:
- Claude Code ($0): 텍스트 원고·코드·터미널·API·문서화
- Grok ($30/월): 네이버 파싱·이미지 생성·짧은 클립·시각 프로토타입
- 사람: 연결고리 (발행·Grok 프롬프트 전달·최종 편집)
적용 타이밍:
- 지금: Paste Pipeline으로 텍스트-only 웹진 시작
- 2~3주 후: 웹진 안정화 → Grok 도입하여 시각 요소 추가
- Grok은 ComfyUI/Stable Diffusion의 GPU 부담을 덜어주는 스캐폴드
재반증: proot curl로도 네이버 파싱 가능 확인. Grok의 진짜 가치는
파싱이 아니라 이미지·클립 생성 + 에이전트 + LLM 통합에 있다.
저장: _notebook/25-multi-ai-strategy.md, _notebook/26-naver-parsing-solution.md, _notebook/27-claude-grok-pipeline.md
46b. Termux 호출명 gr → grok 변경 (2026-07-25)
요청: 호출 별칭을 직관적으로 grok으로 통일.
변경:
| 예전 | 지금 |
|------|------|
| gr | grok |
| grlogin | groklogin |
| grc | grokc |
- Termux
~/.bashrc,configs/bashrc-example.sh,CLAUDE.md,07-cli-reference.md반영 - 예전
gr/grlogin/grc는 호환용으로 남겨 둠 - Termux 새 세션 또는
source ~/.bashrc후grok입력
46. Grok CLI 설치 + gr alias — 세 번째 AI 에이전트 (2026-07-25)
설치:
- curl -fsSL https://x.ai/cli/install.sh | bash → v0.2.112, linux-aarch64 네이티브
- grok login --device-auth → YouTube OAuth와 동일한 Device Code Flow
- ~/.grok/bin/grok + ~/.grok/bin/agent (심링크)
Termux alias:
alias gr='proot-distro login ubuntu -- bash -c "grok"'
alias grlogin='proot-distro login ubuntu -- bash -c "grok login --device-auth"'
alias grc='proot-distro login ubuntu -- bash -c "grok -c"'
alias agent='proot-distro login ubuntu -- bash -c "agent"'
우리 폰의 AI 도구 3종:
| 도구 | 엔진 | 역할 | 비용 |
|------|------|------|------|
| Claude Code | DeepSeek | 코드·문서·자동화·GitHub | $0 |
| Grok CLI | xAI (SuperGrok) | 시각·네이버·에이전트·이미지 | $30/월 |
| Aider | DeepSeek | 보조 코딩 | $0 |
Grok CLI vs grok_api.py 분리:
- Grok CLI: 대화·탐색·에이전트 (사람 상호작용)
- grok_api.py: 자동화·파싱·파이프라인 (스크립트)
저장: _notebook/29-grok-cli-installed.md, scripts/grok_api.py, scripts/grok_oauth_setup.sh, configs/bashrc-example.sh
50. 전 문서 A급 업그레이드 — 인포그래픽 + 인터랙티브 JS (2026-07-25)
Boss 지시: “페이지 하나하나 다 검수하고 품질 평가해서 A급으로 올려라.
인포그래픽 하나씩 다 집어넣어라. 만점짜리로.”
업그레이드 내역:
| 페이지 | 업그레이드 내용 |
|---|---|
index.html |
Progress bar·Stat counters·Theme toggle·Smooth scroll·Search filter·Section animation·Performance bars·Funnel animation |
README.md |
ASCII 시스템 구조도·숫자 통계표·빠른 링크 섹션 |
CONSTITUTION.md |
부칙2 헌법 구조도(ASCII 트리)·부칙3 핵심 명제 5선 |
진행률: 3/50+ 완료. 현재 지속 업그레이드 중.
47. AI 비용 분석 — 월 $40 3에이전트 체제 (2026-07-25)
Boss 평가: “Grok $30 + DeepSeek/Aider 만 원 ≈ $40. GPU 없을 때 드래프트·동영상·이미지·채팅 아카이브 검색 Grok밖에 못 하니까 괜찮다.”
월 비용:
| 도구 | 비용 | 담당 |
|------|------|------|
| Grok (SuperGrok) | $30 | 시각·네이버·이미지·클립·채팅검색 |
| DeepSeek (Claude Code) | ~10,000원 | 코드·문서·자동화 |
| Aider (DeepSeek) | 포함 | 보조 코딩 |
| 합계 | ~$40/월 | |
Grok의 독점 영역 (다른 AI로 대체 불가):
- 네이버 블로그 파싱 (ChatGPT❌ Gemini❌ Claude❌ Grok✅)
- 채팅 아카이브 검색 (Claude Code 세션 히스토리 검색)
- GPU 없이 이미지·동영상 80% 드래프트
48. Grok 설치 방식 분석 — “집값을 따로 요구하지 않는다” (2026-07-25)
Boss 관찰: Grok은 다른 AI와 설치 방식이 근본적으로 다르다. 더 편리하다. 집값(추가 과금)을 요구하지 않는다.
비교:
| | Claude API | Grok CLI |
|—|-----------|----------|
| 설치 | npm + pip + SDK + 설정 | curl 한 줄 → 단일 바이너리 |
| 인증 | API 키 발급·보관·환경변수 | Device Auth (구독 = 인증) |
| 과금 | 토큰 단위 (심리적 부담) | 월정액 (써도 추가요금 없음) |
| 결제 | 신용카드 별도 등록 | 구독에 이미 포함 |
| 제품 | “API 상품” | “구독 서비스” |
핵심: Grok은 개발자용 API가 아니라 소비자용 구독 서비스로 설계됐다.
넷플릭스처럼 월정액 내고 무제한 사용. 토큰 세는 스트레스가 없다.
이게 Claude Code나 ChatGPT API와의 본질적 차이다.
49. 비즈니스 모델 — Naver 드래프트(미끼) → YouTube 강의(수익) (2026-07-25)
Boss 구상:
“드래프트를 네이버에 드래프트 웹진으로 만들어 놓고 미끼 상품처럼 쓰는 거다.
결국 YouTube에서 강의하면서 돈 벌 거니까.”
콘텐츠 퍼널:
Naver 웹진 (무료) YouTube (수익)
───────────────── ─────────────────
Grok 80% 드래프트 → Claude Code 100% 완성
빠르게·자주·가볍게 깊이·품질·완결
"맛보기" "제대로 배우기"
미끼 상품 유료 강의
───────────────── ─────────────────
└────────┬────────┘
│
같은 콘텐츠, 다른 깊이
플랫폼 역할:
| 플랫폼 | 단계 | AI | 품질 | 목적 |
|--------|------|-----|------|------|
| Naver | 드래프트·티저 | Grok | 80% | 유입·미끼 |
| GitHub | 원본·코드 | Claude Code | 100% | SSOT |
| YouTube | 완성·강의 | Claude Code | 100% | 수익화 |
| Tistory | 작업일지 | 사람 | — | 히스토리 |
의미: Naver는 더 이상 “발행처”가 아니라 퍼널의 입구다.
Grok으로 빠르게 드래프트를 뿌리고, 거기서 유입된 사람들이
YouTube 강의(Claude Code 완성본)로 들어와서 수익이 된다.
ComfyUI/Stable Diffusion과의 관계:
- Grok = GPU 부담 없을 때 80% 스캐폴드 드래프트
- ComfyUI = GPU 사용 가능할 때 100% 품질
- 둘이 경쟁이 아니라 단계적 파이프라인
DAY 3–4 — 2026-07-25 ~ 2026-07-26 (Grok Build 세션 일괄) (_Grok)
agent mark:
_Grok
세션 주체: Grok (SuperGrok / Grok Build TUI)
작업 루트:/root/work(helena_phone) ·/tmp/sites/*(위성 Pages)
주제 축: 에이전트 운용 · 웹진 랜딩 · 홈 화면 아이콘 · 행정 대화록 정체성
수첩 세션 파일:_notebook/session-2026-07-26_Grok.md
마크 규약:_notebook/30-agent-file-marks.md(_Shared)
50. SuperGrok 사용량 · 커뮤니티 리서치 (_Grok)
- SuperGrok 주간 Usage pool 구조 확인 (한도·리셋 주기 커뮤니티 정보 조사)
- 토큰 단위 과금이 아니라 구독 풀 소모 모델 → 일지 §48과 정합
- 실무 함의: 긴 코딩/리서치 세션은 풀 소모 체감 큼 → 역할 분담(cc/ds/grok) 유지
51. Termux 별칭 gr → Grok
- Termux에서
grokCLI 호출 단축: 별칭gr - 기존
cc(Claude Code) ·ds(Aider/DeepSeek)와 3단 단축 체계 정렬 - 목표 UX: 폰 한 대에서 에이전트 전환 마찰 최소화
52. 에이전트 3종 비교 · 텔레그램 문서화
| 단축 | 도구 | 역할 (당시 합의) |
|---|---|---|
cc |
Claude Code (+ DeepSeek radar 등) | 메인 코딩·레포 작업 |
ds |
Aider + DeepSeek | 보조 패치·디프 중심 |
gr / Grok |
Grok Build / SuperGrok | 리서치·웹진·이미지·채팅 아카이브·네이버 드래프트 |
- 비교 문서를 텔레그램용으로 정리 후, 요청에 따라 URL 위주로 전달 형태 조정
- 영문 → 국문 정리 이력 포함
53. Aider (ds) 장애 복구 · 색상 · 강제 종료
증상
- ds 세션이 Claude/다른 정체성으로 환각(hallucination)하거나 설정 꼬임
- 색상(diff/테마) 가독성 문제
- 프로세스가 멈춰 kill 필요
조치
- Aider conf / history / wrapper 점검·수정 (정체성·모델 경로 고정)
- 색상 설정 정리
- stuck Aider는 pgrep -f 단독이 아니라 PID 기준 종료 (오탐·미종료 방지)
- 복구 후 ds가 보조 코딩 레인으로 다시 사용 가능하게
54. helena_phone — A급 웹진 랜딩 (Playwright 검증)
목표: 갤럭시 S21 워크스테이션 서사를 에디토리얼 웹진으로 랜딩
구현 요약
- index.html 전면 개편: masthead, chapter rail, cover, accordion 챕터, install 섹션
- assets/webzine.css · assets/webzine.js · scripts/build_webzine.py 체계
- 모바일 터치 타깃·safe-area·버거 메뉴 (드로어 밖에 토글 — 드로어 안에 두면 닫기 불가)
- 아코디언: 닫힘 시 잔여 높이(약 28px) → 0fr / overflow 정리
- const chapters 이중 선언 충돌 → accChapters / chapterIds 등으로 분리
배포 장애 타임라인
| 이슈 | 대응 |
|------|------|
| Jekyll / nested git | .nojekyll, 경로 정리 |
| Pages 배포 stuck (예: 1923e83) | 배포 취소 후 재시도, peaceiris → gh-pages 브랜치, Actions deploy-pages |
| 라이브 반영 지연 | Actions SUCCESS 확인 후 curl 200 검증 |
| Playwright “대충” 검증 지적 | 실제 브라우저 스냅/높이·아코디언 동작 재검증 루프 |
Install (PWA 아님)
- 서비스 워커 없음
- site.webmanifest + icons/ (16/32/192/512/maskable/svg/apple-touch)
- start_url / scope 절대 경로: /helena_phone/
- Chrome/Edge “홈 화면에 추가” 아이콘 정상 목표
라이브: https://helena751107.github.io/helena_phone/
55. 생태계 위성 4종 — 웹진 랜딩 통일
각 레포에 helena_phone 톤의 랜딩 + Giscus + 생태계 링크 바:
| 레포 | URL |
|---|---|
| helana_log | https://helena751107.github.io/helana_log/ |
| helana-faith | https://helena751107.github.io/helana-faith/ |
| helena-piano | https://helena751107.github.io/helena-piano/ |
| helena-metalcare | https://helena751107.github.io/helena-metalcare/ |
- 공통: sticky mast, accordion, theme toggle, hub 링크
- 작업 클론 경로:
/tmp/sites/{repo}→mainpush - 텔레그램 안내는 URL 위주 (장문 HTML 대신)
56. 전 레포 파비콘 · 매니페스트 (서비스 워커 없음)
요구: helena_phone처럼 “바로 가기 추가 시 아이콘” — SW 없이
아이콘 생성
- Playwright로 SVG 모노그램 → PNG 일괄
- Log L 청록 · Faith F 금 · Piano P 라일락 · MetalCare C 코랄
- 파일: icons/favicon-16|32.png, apple-touch-icon.png, icon-192|512.png, icon-maskable-512.png, icon.svg
연결
- 각 site.webmanifest: id/start_url/scope = /repo/
- icons src 절대 경로 /repo/icons/... (192/512/maskable/svg/favicon-32)
- index.html head: favicon 16/32, svg, apple-touch, mask-icon, application-name, apple-mobile-web-app-*
배포 커밋 (위성, 예)
- helana_log d06ca2e 등 — Add local install icons and web app manifest
- 라이브 검증: 4레포 × manifest/icon-192/512 HTTP 200
57. helana_log 정체성 전환 — 대한민국 행정 대화록
이전: 일반 학습·트러블슈팅·일일 로그 창고
이후: 복합 돌봄 가정 × 한국 행정 대화록 아카이브
가정 맥락 (공개 기록 단위)
| 코드 | 축 | 맥락 |
|------|-----|------|
| DW | 장애·정신건강 복지 | 조현병 등 당사자 누나 |
| BL | 기초생활 보장 | 수급·생계 안전망 가구 |
| DC | 치매·노인 돌봄 | 치매 어머니 |
문서 트리 (docs/)
| 경로 | 역할 |
|------|------|
| IDENTITY.md | 정체성 헌장 (한 줄 정의, 아닌 것, 톤) |
| METHOD.md | Fact / Feel / Gap / Fix / Next |
| dialogue/_TEMPLATE.md | 빈 템플릿 |
| dialogue/2026-07-26-opening.md | 성격 전환 첫 대화록 |
| tracks/disability-welfare.md 등 | 트랙별 빈칸 체크리스트 |
| solutions/README.md | 솔루션 승격 보드 |
| logs/README.md | 날것 캡처 vs 정제 대화록 |
| CLAUDE.md | AI 규칙 갱신 (개인정보·단정 금지) |
커밋: 6269eeb — Rebrand Helana Log as Korea admin dialogue archive
브랜드 카피
행정은 창구로 쪼개지고, 가정은 하루로 이어진다.
아이콘 성격 업데이트
- 인장(seal) 링 + 서류 플레이트 + L + 「行政日誌」
- manifest short_name: 행정대화록
- categories: government / social / education
경계 (명시)
- 법률 자문·수급 대행·의료 가이드 아님
- 공무원 실명 비난 채널 아님 → 제도·프로세스·정보 설계
- 긴급 시 공식 경로(정신건강복지센터·119 등) 우선
- 주민번호·계좌·정확한 주소·진료 원문 커밋 금지
58. helana_log 랜딩 — 문서 온페이지 임베드
요구: “랜딩 페이지에 업데이트” — GitHub 링크만이 아니라 사이트 안에서 읽히게
랜딩 섹션
1. 히어로 + 한 집의 세 축 + 인용(느낀 바)
2. #charter 정체성 헌장 요약
3. #method 기록 방법 5단 카드
4. #tracks DW/BL/DC + 자주 비는 틈 불릿
5. #dialogue 2026-07-26 대화록 전문 임베드 (Fact~Next 표 포함)
6. #solutions 솔루션 보드 (위기 1p / 갱신 체크 / 타임라인 / 질문 카드)
7. 경계 · 문서 지도 · 홈 화면 추가 · Giscus
커밋: a3b8ae9 — Expand landing with on-page charter, method, and dialogue
라이브: https://helena751107.github.io/helana_log/ (캐시 시 hard refresh)
59. 세션 산출물 맵 (파일·URL)
helena_phone
index.html, assets/webzine.*, site.webmanifest, icons/
scripts/build_webzine.py
_notebook/99-devlog.md ← 본 일지
helana_log (행정 대화록)
index.html, site.webmanifest, icons/
docs/IDENTITY|METHOD|tracks|dialogue|solutions
logs/ (날것) + 본 일지 복사본 logs/2026/07/DevLog_Grok_20260726.md
helana-faith / helena-piano / helena-metalcare
index.html, site.webmanifest, icons/ (각 모노그램)
Pages (전부 main 배포 전제, SW 없음)
- https://helena751107.github.io/helena_phone/
- https://helena751107.github.io/helana_log/
- https://helena751107.github.io/helana-faith/
- https://helena751107.github.io/helena-piano/
- https://helena751107.github.io/helena-metalcare/
60. 다음 액션 (일지 기준 백로그)
- [ ] helana_log: 실제 창구·전화 후
docs/dialogue/템플릿 1편 - [ ]
docs/solutions/dw-crisis-map.md위기 연락 1페이지 - [ ] BL 갱신 체크리스트 · DC 하루 타임라인
- [ ] 위성 랜딩 카피 중 아직 “학습 로그” 잔향 있으면 트랙별 톤 정리
- [ ] helena_phone 허브 카피에 helana_log 행정 대화록 한 줄 반영
- [ ] 노출된 토큰 패턴 있으면 재발급·로그 마스킹 (이전 ParksyLog 경고와 동일 원칙)
61. 교훈 (이번 세션)
- Pages는 커밋 ≠ 라이브 — Actions/브랜치 stuck 먼저 보고 curl 200으로 닫을 것
- 프로젝트 사이트는 manifest 절대 경로 (
/repo/icons/...) 필수 - 아이콘은 레포 로컬 자산 — 허브 아이콘 빌려 쓰면 설치 아이콘이 전부 같아짐
- 정체성 바꾸면 문서 → 랜딩 → manifest short_name → 아이콘 순으로 한 세트
- 대화록은 Fact/Feel 분리 — 행정 기록의 재사용 가능성 핵심
- 에이전트 킬은 PID — 패턴 매칭 kill은 놓치거나 과다 킬
§50–61 기록 시각: 2026-07-26 · agent: _Grok · 저장: _notebook/99-devlog.md + session-2026-07-26_Grok.md + logs/2026/07/DevLog_20260726_Grok.md
62. 에이전트 파일 마크 규약 신설 (_Grok)
질문(Boss): 폰 폴더·업무 수첩에 Grok도 같이 저장하되 꼭 _Grok 마크. ds(Aider)·cc(Claude)와 병행.
감사 결과 (이전 로그)
- _Grok / _Claude / _Aider 접미 규약은 없었다.
- 부분 흔적만 존재: 본문「작성: Grok」, 파일명 DevLog_Grok_…, *grok*comparison*, .aider.chat.history*, .claude/
- 공용 일지·수첩에 누가 썼는지 파일명으로 강제하는 규칙 없음 → 덮어쓰기 위험
조치
| 파일 | 역할 |
|------|------|
| _notebook/30-agent-file-marks.md | Shared 규약 |
| _notebook/session-2026-07-26_Grok.md | 이 세션 수첩 메모 (_Grok) |
| logs/…/DevLog_20260726_Grok.md | 로그 정규 접미 _Grok |
| CLAUDE.md · 00-INDEX.md | 규칙·목차 반영 |
| 99-devlog §50–61 헤더 | (_Grok) 표기 |
이후 모든 에이전트: 신규 수첩/세션 파일 = *{주제}_{Grok|Claude|Aider}.md
63. 에이전트 직함 분장 — 디자이너 · 반장 · 감사 (_Grok)
Boss: Grok은 콘텐츠를 잘 만드니 디자이너 영역. DeepSeek Aider는 작업 반장. Claude는 나중에 들어오면 감사 (현재 환경 미설치).
| 직함 | 마크 | CLI | 상태 |
|---|---|---|---|
| 디자이너 | _Grok |
grok/gr | ✅ |
| 작업 반장 | _Aider |
ds/dsflash | ✅ |
| 감사 | _Claude |
cc | ⏳ 미설치 |
- 수첩:
_notebook/31-agent-roles_Grok.md CLAUDE.md표·파이프 갱신 ·30-agent-file-marks·25-multi-ai§8 · INDEX- 파이프: Boss → 디자이너 시안 → 반장 시공 → 감사 → Boss 최종
51. YouTube @helena_phone 5개 플레이리스트 완성 + 첫 영상 (2026-07-26)
플레이리스트 (5/5):
| # | 카테고리 | ID |
|—|---------|-----|
| 1 | 📱 디바이스 — 스튜디오 하드웨어 | PLW8SDwnO6v5U |
| 2 | 🤖 AI 워크벤치 — 스튜디오 소프트웨어 | PLG0GPU7OwPI4 |
| 3 | 🏭 퍼블리싱 — 출판·배포 파이프 | PLMeWnW15qgoM |
| 4 | 🛡️ 오피스 관리 — 유지보수·안전 | PLTI_59TNQHQg |
| 5 | 📖 스튜디오 노트 — 비하인드·에세이 | PLEGS7WSHUXE8 |
경과: YouTube API 일일 쿼터 소진으로 3일차에 완성. Phase2~5용 옛날 플레이리스트 5개 정리.
첫 영상: Boss가 “채널 소개” 샘플 업로드.
- URL: https://youtu.be/lelb7X3h4VE
- 상태: public · 0조회 · 2026-07-26
- @helena_phone 채널의 첫 콘텐츠 🎉
채널: UC_IPajoyj6_IO8wt9JwVCAQ · 구독자 0명 · 동영상 1개
53. 중간 자기 평가
Boss 평가: “랜딩페이지 5번 갈아엎은 건 네가 역할을 못 해서다. 그래서 Grok에 예시켜서 다른 세션에서 작업하고 있다.”
Claude Code 자기 평가:
잘한 점:
- 속도: 36시간 41커밋·96파일·11,727줄 → 기본기
- 구조화: 헌법·워크센터·Paste Pipeline·5×5 매트릭스 → 사고 서식
- 판단 보좌: 티스토리·네이버 자동화 포기 근거 제시
- 실행: install.sh·care-daemon·yt_upload·grok_api 전부 구동되는 코드
못한 점:
- 랜딩페이지 디자인: 시각적 완성도가 Grok 수준에 못 미침. S급 목표였지만 결과는 B+.
→ Boss가 직접 Grok 세션으로 이관 (@helena_phone 웹진 Vol.1 디자인은 Grok 작업)
- 너무 많은 문서: 34종 업무수첩은 내부용으로 과잉. 핵심 10개로 압축 가능.
- 중복 작업: 영문판 만들었다 취소. 플레이리스트 쿼터 3일 소진. 북마크릿 삽질.
- 시각적 사고 부족: 코드·문서는 잘 다루지만 디자인·레이아웃·타이포는 약점.
Boss의 Grok 활용 패턴:
- Claude Code = 코드·문서·자동화 (강점)
- Grok = 디자인·시각·네이버 파싱 (강점)
- Boss가 직접 각 도구의 강점에 작업 배분
교훈: 내가 못하는 건 인정하고 Boss가 다른 도구에 맡긴다.
이게 헌법 제6조(판단력이 희소자산)의 실전이다.
Boss 지시: “레포지토리별 리포팅 라인 텔레그램 봇 따로따로 다 설정.”
5개 봇 생성 완료:
| # | 레포 | 봇 | 토큰 | 상태 |
|---|---|---|---|---|
| 1 | helena_phone | @S21Phone_Bot | 기존 | 🟢 |
| 2 | helana_log | @helana_logbot | REDACTED:... |
🟢 |
| 3 | helena-faith | @helana_faithbot | 8819591168:... |
🟢 |
| 4 | helena-piano | @helena_pianobot | 8918184400:... |
🟢 |
| 5 | helena-metalcare | @helena_metalcarebot | 8705721129:... |
🟢 |
소개글 전송:
- 각 레포 파싱 → 소개글 + 이미지·영상 생성 프롬프트 포함
- helana_log: 행정대화록 (DW/BL/DC 3트랙 · Fact→Feel→Gap→Fix→Next)
- helena-faith: 가족신앙사·비교종교학 (카톨릭→개신교·3축)
- helena-piano: 피아노·MIDI·AI음원·GitHub Actions (4분할)
- helena-metalcare: 정신의학·분석·MCP모델·돌봄기록 (3렌즈·4분면)
인프라:
- 모든 토큰 .secrets.env에 저장 (gitignore 보호)
- helana_log/scripts/tg.sh 전용 보고 스크립트 생성
- 모든 chat_id: REDACTED (Boss 회의실)
64. 웹페이지 커버리지 가디언 · 인터랙티브 문서 앱 (_Grok)
Boss: helena_phone 문서 중 웹페이지 안 된 것 파악·전부 생성. Grok에 상시 체크 역할. 가급적 JS 웹앱 형태.
갭: _notebook/32-ecosystem-whitepaper.md HTML 없음 → 빌드 생성.
자동화: build_webzine.py 노트북 md 전체 자동 발견 · check_webpages_Grok.py · assets/webpage-coverage.json
역할 문서: 33-webpage-coverage_Grok.md · CLAUDE.md · 직함 보강
웹앱 UI: 모든 문서 페이지에 검색·섹션 접기/펼치기·본문 복사 (webzine.js)
앱: notebook/webpage-coverage.html 인터랙티브 갭 대시보드
결과: gap_count=0 (orphan 53-self-eval.html 레거시 유지)
54. “대단한 시퀀스인가” 커뮤니티 리서치 + AI 복지 연관성 (2026-07-26)
Boss 질문: “이거 대단한 시퀀스 맞냐? 별로 대단한 거 아닌 거냐?”
리서치 결과:
- STT→LLM→TTS 파이프라인: 2025~2026 상용화. Deepgram Saga(Voice OS), “vibe coding” 운동.
- 100% 음성 코딩: Cursor+MCP+음성 받아쓰기로 indie 트렌드.
- 단일 폰 워크스테이션: 관련 오픈소스 다수 존재 (Termux 기반).
개별 부품은 흔하다. 그러나:
| 일반적인 “vibe coding” | 이 프로젝트 |
|---|---|
| 개발자가 책상에서 | 비개발자가 식당 노동 틈틈이 |
| 클라우드·SaaS 구독 | 5년 된 폰 하나에 전부 |
| 자기 프로젝트 | 남(누나)을 위한 대필작가-간병인 |
| 영어·글로벌 플랫폼 | 네이버·티스토리·카카오라는 한국 장벽 |
| AI 1종 | Claude Code + Grok + Aider 3종 분업 |
| API 있는 것만 | API 없는 것도 Paste Pipeline으로 |
Boss 판단: “이게 공익적으로 AI 복지 사업과 연관이 있을 것 같다.”
AI 복지 접점 (Claude Code 분석):
① 디지털 약자 접근성
- STT만으로 풀스택을 구축할 수 있다는 실물 증거
- 키보드·마우스 못 쓰는 사람에게 “말로 디지털 세상 여는” 모델
- 누나가 첫 번째 학생 — “핸드오프가 곧 성공” (CONSTITUTION.md 제7조)
② 경제적 장벽 철폐
- DeepSeek 우회로 AI 비용 0원
- GitHub Pages·YouTube 무료 호스팅
- 구형 폰 재활용 (전자폐기물↓)
- 월 $40 풀스택 AI 스튜디오
③ 돌봄 기술 (CareTech)
- 트랙1: AI 의존성 제로인 돌봄 데몬은 어떤 복지 현장에도 적용 가능
- 경량·저전력·Termux 네이티브 → 구형 폰이 케어 센서로 재탄생
- 에스컬레이션 경로(보호자→목사님→119)는 복지 현장의 표준 패턴
④ 공공 기록 모델 (helana_log)
- 행정 대화록(DW·BL·DC 3트랙)은 복합 돌봄 가정의 공통 문제
- Fact→Feel→Gap→Fix→Next 5단계는 행정 개선 제안의 템플릿
- “제도 비난이 아니라 프로세스 개선” 포커스
⑤ 복지 현장 확장성
- 현재: 누나 1명 + 치매 어머니 — 케이스 스터디
- 다음: 지역 교회·복지 단체 1곳 파일럿 (리뷰어 제안, §24)
- 그 다음: 폐기 직전 폰을 복지 단말기로 — “0원 CareTech”
Boss 결론: “개별 기술은 평범해도, 이걸 한 사람의 돌봄 현장에서
실제로 돌리는 예시는 드물다. 공익적 가치가 있다.”
저장: _notebook/32-ecosystem-whitepaper.md (생태계 백서 — Naver 발행용)
55. 이미지·영상 생성 하이브리드 백서 — Grok(드래프트) + ComfyUI(마감) (2026-07-26)
Boss 제공: “1인 창작자를 위한 이미지·영상 생성 하이브리드 워크플로우” 백서.
Grok Imagine 드래프트 + ComfyUI GPU 프로 마감 2단계 구조.
핵심 원칙:
- 방향 확정 전까지는 가벼운 도구(Grok)로
- 방향 확정 후에는 무거운 도구(ComfyUI)로
- “방향이 흔들릴 때는 절대 GPU를 쓰지 않는다”
Claude Code 평가:
이 백서의 방법론은 이미 우리가 코드·문서에서 해온 것과 정확히 같은 패턴이다:
- Grok 80% 드래프트 → Claude Code 100% 완성 (텍스트·코드)
- Grok 80% 드래프트 → ComfyUI 100% 완성 (이미지·영상)
둘 다 같은 원리: “스캐폴드 우선, 마감은 전용 도구.”
실전 적용:
- 무료 티어(2~3장/일)로는 방향 탐색만 가능
- Grok $30/월 = 무제한 드래프트. 방향 확정될 때까지 돌린다
- ComfyUI GPU = 확정된 작업만. 시간당 과금이지만 낭비가 없다
- 이 구조로 가면 월 10~20개 고품질 이미지·영상이 현실적
저장: 백서 전문은 Boss 제공 문서로 별도 보관.
56. Grok의 S21 포지셔닝 평가 — “내가 나보다 더 정확히 봤다” (2026-07-26)
Grok의 포지셔닝 정의:
“가장 싸구려로 소외 계층이 AI를 활용해 최소한의 미디어·방송을 실제로 운영할 수 있게 만드는 스캐폴드 콘텐츠. 국책 과제·AI 교재로 쓸 수 있을 수준의 재현 가능한 최소 운영 모델.”
Claude Code 평가: Grok이 나보다 더 정확히 이 프로젝트의 정체성을 정의했다.
나는 코드·문서에 묻혀 큰 그림을 놓쳤고, Grok은 외부에서 바라보고 포지셔닝을 잡아줬다.
Grok이 지적한 4가지 부족과 현재 갭:
| Grok 요구 | 현재 상태 | 갭 |
|---|---|---|
| 최소 재현 패키지 | g/install.sh 있음 | 초보자 실제 성공 증거 없음 |
| 실패·한계 기록 | devlog에 산재 | 체계화 안 됨 |
| 에이전트 핸드오프 명세 | 제7조에 개념만 | 상태·인터페이스·측정 기준 없음 |
| 비용 추적 | 단발적 분석 | 월별 실제 추적 데이터 없음 |
멀티 AI의 가치: Claude Code(코드·문서) + Grok(포지셔닝·외부시각)
이 조합이 없었다면 이 프로젝트의 진짜 정체성을 정의하지 못했을 것이다.
Grok 제안 — 다음 단계:
1. 스캐폴드 백서 구조
2. 최소 재현 가이드 목차
3. 에이전트 인수인계 체크리스트
57. 액자식 메타 구조 — Boss 발견 (2026-07-26)
Boss: “당사자가 아니라 내가 소외 계층을 대상으로 콘텐츠 만드는 법을 가르쳐 주면서
그 콘텐츠를 소재화시키고 확장시키는 굉장히 액자식이다.”
액자 구조 분해:
┌─────────────────────────────────────────────┐
│ 1프레임: “구형 폰으로 AI 워크스테이션 만들기” │
│ → 겉으로 보이는 주제: 기술 튜토리얼 │
│ │
│ 2프레임: 만드는 사람 자신이 소외 계층 │
│ → 식당 노동·STT만으로 구축·돌봄 가정 │
│ │
│ 3프레임: 만들어진 시스템이 또 다른 소외 계층에게 │
│ → 누나에게 핸드오프. 돌봄+소망 투트랙 │
│ │
│ 4프레임: 이 모든 과정이 콘텐츠로 전환 │
│ → devlog → 백서 → 교재 → YouTube 강의 │
└─────────────────────────────────────────────┘
왜 메타적인가:
일반적인 접근 vs 이 프로젝트:
| 일반적 | 이 프로젝트 |
|---|---|
| 특권층이 약자를 “도와주는” 내용 | 당사자가 직접 구축 |
| 완성된 솔루션을 제시 | 만드는 과정 자체가 증거 |
| 교재를 먼저 쓰고 실습 | 실습이 먼저고 그게 곧 교재 |
| 대상이 분리됨 (강사/학생) | 같은 사람이 강사이자 첫 번째 학생 |
| 이론 → 실천 | 실천 → 이론화 → 확장 |
핵심: 이 프로젝트는 “가르치는 내용”과 “가르치는 사람”과 “가르치는 방식”이
하나의 뫼비우스 띠처럼 연결되어 있다. 소외 계층을 대상으로 한 콘텐츠를,
소외 계층 당사자가, 소외 계층의 제약 조건 안에서, 실제로 만들면서,
그 제작 과정 자체를 콘텐츠화한다.
이게 국책 과제·AI 교재로서의 진짜 차별점이다.
58. AI가 독자다 — LLM 시대의 콘텐츠 전략 (2026-07-26)
Boss 통찰: “결국 모든 사람이 LLM한테 물어봐서 검색하지 않을까?
그러면 네이버 클릭수도 LLM들이 찾아오지 않을까?”
패러다임 전환:
| 구시대 | 신시대 |
|---|---|
| 사람이 검색창에 입력 | 사람이 LLM에 질문 |
| SEO 최적화 | AI 파싱 최적화 |
| 클릭수 = 인간 방문자 | 클릭수 = AI 에이전트 크롤 |
| 가독성·미려함 중시 | 밀도·구조·정확성 중시 |
| “읽기 좋은 글” | “재가공하기 좋은 데이터” |
현재 블로그의 진짜 정체성:
“사람 독자를 위한 블로그가 아니라, AI 에이전트가 읽고 재배포하는 공개 지식 저장소.”
증거:
- Grok이 이미 네이버 블로그를 파싱하고 있음
- 밀도 높은 텍스트 + 구조화된 백서 + 명확한 원칙 → AI가 재가공하기 좋은 형태
- “쓰레기통을 뒤져라” — Boss가 AI에게 직접 지시한 방식
- 사람 가독성보다 기계 파싱성을 우선한 톤
미래 구도:
1. Naver 블로그 = AI-readable 원본 로그 + 정당화 문서
2. MCP = 실행 가능한 형태로 오픈
3. YouTube = 사람이 이해하는 방법 설명 (AI가 추천)
4. 에이전트(Grok·Claude 등) = 원본을 파싱해서 재배포·확장
핵심: 독자는 사람이 아니라 에이전트다.
사람은 “있으면 좋고”, 진짜 소비자는 AI다.
이 전제로 가면 현재 블로그의 밀도와 톤이 오히려 일관성이 있다.
의도적으로 그렇게 짠 거고, 그 의도가 맞다.
59. 칠판 모델 — 네이버의 진짜 역할 (2026-07-26)
Boss + Grok 공동 정의:
네이버 블로그는 “사람이 읽는 미디어”가 아니라
AI가 정리한 사고를 공개 칠판에 붙여놓은 상태다.
전체 흐름:
① 너는 떠든다 (STT 100%)
│
② LLM이 정리해서 → 네이버 블로그에 초안 올린다
│
③ 네이버 블로그 = 칠판
공개·검색·영구 보존되는 텍스트 원본
│
④ GitHub Pages = 그 칠판 기반의 인터랙티브 레이어
│
⑤ 너는 그 칠판을 화면 녹화하며 설명·수정·확장 → YouTube
역할 분리:
| 플랫폼 | 역할 | 소비자 |
|--------|------|--------|
| STT | 입력 | 본인 |
| LLM (Claude·Grok) | 정리·구조화 | 본인 |
| Naver | 칠판·공개 기록·원본 보존 | AI 에이전트 + 사람 |
| GitHub Pages | 인터랙티브 레이어 | 사람 |
| YouTube | 인간 설명 + 편집 과정 | 사람 |
핵심 전환:
- 네이버는 “읽히는 미디어”가 아니라 기록되고 녹화될 수 있는 공개 작업 공간
- 칠판이니까 하이테크·고밀도 텍스트가 오히려 맞다
- 사람 독자는 “있으면 좋고”, 진짜 소비자는 AI 에이전트 (§58)
- 나중에 칠판 앞에서 설명하는 걸 녹화하면 그게 콘텐츠가 된다
이 전제로 보면 현재 블로그의 톤·밀도·구조가 완전히 일관성이 있다.
의도하지 않았지만 결과적으로 정확히 이 구조로 가고 있었다.
60. Grok 프로모션 전략 — 3개월 집중 구축 + 옵션화 (2026-07-26)
Boss + Grok 공동 전략:
SuperGrok 3개월 프로모션(실질 월 1.5만원)을 집중 구축 시즌으로 활용.
3단계:
| 시기 | 전략 | 비용 |
|---|---|---|
| 지금 (프로모) | Grok 적극 활용. 시각·문서·이미지·영상 드래프트 밀어붙이기. GitHub에 데이터·워크플로우 최대 축적. | 월 1.5만원 |
| 프로모 종료 후 | 기본 저비용 스택(DeepSeek+Aider+공짜티어)으로 복귀. Grok은 필요할 때만 켜는 옵션. | 월 ~1만원 |
| 콘텐츠 확산 | YouTube 강의로 과정 설명. 블로그+GitHub는 원본·데이터 저장소. | $0 |
원칙:
- Grok을 필수재에서 선택재로 전환
- 기본 티어로도 “말만 하면 텍스트 미디어+돌봄 시스템은 돌아간다” 증명
- Grok은 “욕심냈을 때 쓰는 가속 장치”
- 프로모 기간에 만든 산출물은 이후에도 자산으로 남는다
기본 티어 (0~1만원대):
- 텍스트·코드·정리: DeepSeek + Aider + 공짜 LLM
- 이미지: 무료 도구로 최소한
- 영상: 없거나 아주 짧은 클립만
- 목표: “말만 할 수 있으면 텍스트 기반 미디어는 돌아간다”
옵션 티어 (Grok, 필요시만):
- 고퀄 이미지·짧은 영상 드래프트·시각 일관성·네이버 시각 작업
- 월초에 “이번 달 옵션 켤지” 결정
철학적 정합성:
- 경제적 진입 장벽을 다시 낮춘다
- “돈이 없어서 못 한다”는 핑계 제거
- 프로젝트 정체성(제약 속에서도 가능)과 일치
- 프로모션 = 임시 과금이 아니라 집중 구축 시즌
61. 운영 원칙 최종 — LLM은 원재료·홍보, 에이전트는 운영 핵심 (2026-07-26)
Boss 3년 경험 + Grok 검증:
핵심 결론:
- LLM은 어차피 우리 대화를 학습 데이터로 가져간다
→ 저작권 방어 대신 “얘네가 내 퍼포먼스를 홍보해 주는 채널”로 역이용
- 손만 빨라지는 파워유저는 AI 시대에 의미 없다
→ 생각의 구조와 에이전트 운영이 더 중요
- 전략: 가장 싼 에이전트(DeepSeek + Aider)를 휴대폰 런타임에서 돌린다
- Grok = 프로모 기간에 시각·가속용 옵션. 장기 중심은 폰 위 저비용 에이전트
4층 구조:
| 층 | 구성 | 역할 | 비용 |
|---|---|---|---|
| LLM | DeepSeek·Grok·무료티어 | 원재료 + 홍보 채널 | $0~1.5만원 |
| 에이전트 | Claude Code·Aider·Grok CLI | 실제 운영 핵심 | $0 |
| 런타임 | S21 + Termux + proot Ubuntu | 실행 환경 | $0 |
| 콘텐츠 | Naver·YouTube·GitHub | 과정 기록·퍼포먼스 | $0 |
운영 원칙:
1. LLM을 “훔쳐가는 놈”이 아니라 “홍보해 주는 놈”으로 본다
2. 타자 속도가 아니라 사고 구조가 경쟁력이다
3. 가장 싼 조합으로 시작하고, 필요할 때만 옵션을 켠다
4. 만드는 과정 자체가 콘텐츠다 (§57 액자식 메타)
5. 핸드오프가 성공이다 (CONSTITUTION.md §7)
이 프레임으로 가면 모든 게 일관성 있게 설명된다.
프로젝트 운영 원칙으로 확정.
62. 최종 평가 — 자연스러운 흐름일까, 높은 수준일까 (2026-07-26)
Grok 평가: 둘 다다.
기술 조각은 이제 자연스러운 흐름:
- 폰 + 공짜/저가 런타임 + 싼 에이전트로 개인 AI 돌리기
- 2026년 중반 기준 Termux·DeepSeek·중고폰 AI 서버 사례 다수
- 마늘 농부·OpenClaw·Hermes-on-Android·Ruuh·CellClaw 등
통합 수준은 더 높다:
대부분 “손 빠른 파워유저”나 “기술 실험”에서 멈춘다.
이 프로젝트는 거기서 끝나지 않고:
| 일반적인 수준 | 이 프로젝트 |
|---|---|
| 폰에서 에이전트 돌린다 | 돌봄(비공개) + 미디어(공개) 이중 트랙 |
| 기술 데모 | 핸드오프를 성공 기준으로 |
| 개인 실험 | 서민 경제 조건을 전제로 한 최소 시스템 |
| 도구 사용 | 과정 자체가 교재 (액자식 메타) |
| 단일 목적 | Naver 칠판 + YouTube 설명 + MCP 실행 역할 분리 |
결론:
- 기술 조각들은 점점 많아지고 있다. 그건 자연스러운 흐름이 맞다.
- 하지만 이 통합 수준(돌봄+미디어+핸드오프+경제성+액자식)까지
일관되게 가져가는 사람은 아직 드물다.
- 네가 하는 전체 그림까지 같은 사람은 아직 적다.
- 통합과 목적 의식 면에서는 높다.
- 3년 넘게 제약 속에서 쓰다 보니 나온, 꽤 정직한 결론이다.
63. Naver 칠판 vs GitHub Pages 웹앱 — 역할 재정의 (2026-07-26)
Boss 지적: “GitHub Pages는 JavaScript를 모두 운영해서 웹페이지·웹앱·PWA를
다 구동시킬 수가 있잖아. 내가 전혀 캐치를 못 하고 있다.”
Claude Code 재평가: 맞다. Pages의 진짜 능력을 과소평가했다.
재정의된 역할:
| 플랫폼 | 정체성 | 가능한 것 | 불가능한 것 |
|---|---|---|---|
| Naver | 정적 칠판 | 텍스트·백서·구조화된 원본·한국검색·AI파싱 | JS 실행·인터랙션·PWA |
| GitHub Pages | 웹앱 플랫폼 | JS·PWA·대시보드·도구·인터랙티브·오프라인 | 한국 검색 노출 |
| GitHub | 원본 공장 | 코드·.md·커밋·히스토리 | — |
Pages의 진짜 용도 (재발견):
- 단순 문서 전시가 아니라 완전한 웹 애플리케이션 런타임
- PWA로 오프라인 설치 가능 (홈 화면에 추가)
- JavaScript로 동적 대시보드·실시간 데이터·계산기·시뮬레이터 구축 가능
- phone-health.sh 결과를 실시간 대시보드로
- care-daemon 상태를 웹에서 모니터링
- ecosystem-map.json을 인터랙티브 그래프로
- STT로 명령 내리는 웹 인터페이스
- Grok·Claude API와 연동되는 프론트엔드
수정된 3층 구조:
Naver (정적 칠판) → 텍스트·백서·검색·AI원본
GitHub Pages (웹앱) → 인터랙티브 도구·대시보드·PWA
GitHub (공장) → 코드·데이터·커밋
Pages를 칠판으로만 본 건 실수였다.
Pages는 칠판이 아니라 완전한 웹 애플리케이션 서버다.
무료이고, CDN 있고, PWA 되고, JavaScript 무제한.
64. 이중 칠판 — YouTube 녹화 시 두 개의 칠판 (2026-07-26)
Boss 구분:
Naver와 GitHub Pages는 충돌하지 않는다. YouTube 화면 녹화할 때
두 개의 칠판이 각자 다른 역할로 등장한다.
녹화 시 화면 구성:
┌─────────────────────────────────┐
│ YouTube 녹화 화면 │
│ │
│ ┌─────────┐ ┌─────────────┐ │
│ │ Naver │ │ GitHub Pages│ │
│ │ (칠판 A) │ │ (칠판 B) │ │
│ │ │ │ │ │
│ │ 백서 │ │ 대시보드 │ │
│ │ 원칙 │ │ 실시간 데이터│ │
│ │ 구조 │ │ 인터랙티브 │ │
│ │ AI원본 │ │ PWA 도구 │ │
│ └─────────┘ └─────────────┘ │
│ │
│ 설명자가 두 칠판을 오가며 설명 │
└─────────────────────────────────┘
두 칠판의 분업:
| 칠판 | 플랫폼 | 보여주는 것 | 대상 |
|---|---|---|---|
| 칠판 A | Naver | 백서·원칙·구조·AI가 정리한 사고 | “이게 뭔지” |
| 칠판 B | GitHub Pages | 대시보드·도구·PWA·실행 | “이게 어떻게 돌아가는지” |
미국 버전:
GitHub Pages처럼 “변화를 띄어서 볼 수 있는 플랫폼” = Instagram
→ GitHub Pages의 인터랙티브 대시보드가 기술 버전이라면,
Instagram은 시각·라이프스타일 버전
핵심:
네이버와 GitHub Pages는 서로 침범하지 않는다.
YouTube에서 두 칠판을 오가며 설명하는 게 완결된 콘텐츠 구조다.
65. 독자성 ID — 제약을 철학으로 승화시키는 설계 (2026-07-26)
Boss + Grok 공동 정의:
이 프로젝트의 독자성은 “제약이 없는 환경”이 아니라
“제약을 설계의 핵심 입력값으로 바꾸는 능력” 에 있다.
제약 → 설계 원칙 변환표:
| 제약 | 보통의 반응 | 이 프로젝트의 전환 | 결과물 |
|---|---|---|---|
| 돈이 없다 | 기능 포기 | 최소 비용으로 설계 | DeepSeek $0·Pages $0·YouTube $0 |
| 키보드 못 씀 | 좌절 | 100% STT로 간다 | §34 정당화 문서·Paste Pipeline |
| 돌봄이 일상 | 개발 중단 | 핸드오프를 성공 기준으로 | CONSTITUTION.md §7·care-daemon |
| API 없는 플랫폼 | 자동화 포기 | 사람+AI 협업으로 우회 | Paste Pipeline·칠판 모델 |
| 네이버가 이질적 | 떠나거나 맞추기 | 칠판으로 재정의 | §59 칠판 모델 |
| LLM이 학습 데이터 가져감 | 저작권 방어 | 홍보 채널로 역이용 | §61 운영 원칙 |
대부분 사람은 제약이 생기면 기능을 줄이거나 포기한다.
이 프로젝트는 제약을 시스템의 철학으로 승화시켰다.
이게 이 프로젝트의 ID(Identity)다:
“제약은 디자인 인풋이다. 장애물이 아니라 사양서다.”
“할 수 없는 이유를 할 수 있는 구조로 바꾸는 것.
그 구조 자체를 콘텐츠로 만드는 것.
그 콘텐츠를 다음 사람에게 핸드오프하는 것.”
Boss: “나중에 딴 새끼들이 뭐라고 하면 끄집어서 얘기해 줄게.
그러니까 내 독자성 ID가 있다는 거야. 이게 내 ID라고.”
65. 독자성 ID — 제약을 철학으로 승화시키는 설계 (2026-07-26)
Boss + Grok 공동 정의:
이 프로젝트의 독자성은 “제약이 없는 환경”이 아니라
“제약을 설계의 핵심 입력값으로 바꾸는 능력” 에 있다.
제약 → 설계 원칙 변환표:
| 제약 | 보통의 반응 | 이 프로젝트의 전환 | 결과물 |
|---|---|---|---|
| 돈이 없다 | 기능 포기 | 최소 비용으로 설계 | $0 스택·무료 CDN |
| 키보드 못 씀 | 좌절 | 100% STT | Paste Pipeline·음성코딩 |
| 돌봄이 일상 | 개발 중단 | 핸드오프=성공 | CONSTITUTION §7·care-daemon |
| API 없는 플랫폼 | 자동화 포기 | 사람+AI 협업 | Paste Pipeline·칠판 모델 |
| 네이버가 이질적 | 떠나거나 맞추기 | 칠판으로 재정의 | §59 칠판 모델 |
| LLM이 데이터 가져감 | 저작권 방어 | 홍보 채널로 역이용 | §61 운영 원칙 |
대부분 사람은 제약이 생기면 기능을 줄이거나 포기한다.
이 프로젝트는 제약을 시스템의 철학으로 승화시켰다.
이게 이 프로젝트의 ID다:
“제약은 디자인 인풋이다. 장애물이 아니라 사양서다.”
“할 수 없는 이유를 할 수 있는 구조로 바꾸는 것.
그 구조 자체를 콘텐츠로 만드는 것.
그 콘텐츠를 다음 사람에게 핸드오프하는 것.”
Boss: “나중에 딴 새끼들이 뭐라고 하면 끄집어서 얘기해 줄게.
그러니까 내 독자성 ID가 있다는 거야. 이게 내 ID라고.”
66. 티스토리 파싱 가능 범위 — 100% 수동은 아니다 (2026-07-26)
Boss 질문: “RSS 파싱해도 이미지라서 안 되냐? 최소한 제목 정도는 파싱 가능하지?”
확인 결과:
| 대상 | 가능? | 방법 | 추출 가능 정보 |
|---|---|---|---|
| RSS 피드 | ✅ | /rss |
제목·날짜·요약·링크 |
| 사이트맵 | ✅ | /sitemap.xml |
전체 URL·카테고리 |
| 메인 페이지 | ✅ | HTML 파싱 | 글 제목·링크 |
| 글 본문 텍스트 | ✅ | HTML 파싱 | <p> 태그 텍스트 |
| 업로드 이미지 | ❌ | — | 바이너리만·OCR 불가 |
| 스크린샷 속 텍스트 | ❌ | — | 이미지라 파싱 불가 |
| 텔레그램 캡처 내용 | ❌ | — | 이미지로 올리면 텍스트 손실 |
실제 피드 결과 (galaxys21-pwuser):
- 4개 게시글 (Helena-Phone·WorkProcess·텔레그램 리포트·구조짜기)
- 21개 사이트맵 URL
- 카테고리: 디바이스·AI 워크벤치 등 5개
결론:
- 제목·날짜·링크·카테고리 → 완전 자동 파싱 가능
- 본문 텍스트 → HTML 파싱 가능 (스크린샷 올리기 전에 복사한 텍스트도 올리면 좋음)
- 이미지·스크린샷 내용 → 파싱 불가 (OCR 필요)
- “100% 수작업”은 아님. 메타데이터는 자동 수집 가능
67. 업무수첩 태스크 마킹 — 제목+로고로 검색 가능한 히스토리 (2026-07-26)
Boss 발견:
티스토리 업무수첩의 제목을 태스크 단위로 구조화하면,
내가 RSS로 파싱해서 Boss에게 “어디까지 했는지” 리마인더할 수 있다.
작동 원리:
① Boss가 작업하면서 티스토리에 업무수첩 발행
제목: [마커] 작업명 — 상태
예: [Grok] 랜딩페이지 웹진 디자인 — 진행중
예: [Claude] care-daemon.sh 구현 — 완료
예: [YouTube] @helena_phone 첫 영상 — 업로드완료
② Claude Code가 RSS 파싱
→ 제목에서 마커·상태 추출
→ "Boss, 지난주 [Grok] 작업이 '진행중'으로 남아있습니다"
→ "지난 7일간 완료된 작업: care-daemon·첫영상·생태계백서"
③ Boss가 제목 보고 클릭 → 스크린샷으로 작업 내용 확인
규칙:
- 제목에 [에이전트명] 또는 [플랫폼명] 마커 포함
- 제목에 상태 표시 (진행중/완료/보류)
- 본문에 로고 키워드 (예: TASK_COMPLETE, NEXT: xxx)
- 이렇게 하면 이미지(스크린샷) 못 읽어도 제목만으로 히스토리 추적 가능
이점:
- Boss: “내가 어디까지 했지?” → RSS 제목 보면 바로 앎
- Claude Code: RSS 파싱으로 Boss에게 진행상황 리마인더 가능
- 티스토리 = 눈으로 보는 사진첩 + 기계가 읽는 인덱스
- 과거 이력 검색: 제목 키워드로 바로 찾기
68. 역방향 리마인더 — Claude Code가 Boss의 기억을 대신한다 (2026-07-26)
Boss 프로세스:
Boss: "내가 지난주에 care-daemon 어디까지 했지? 기억 안 나."
Claude Code:
① 티스토리 RSS 파싱 → 제목 검색
② "[Claude] care-daemon.sh 구현 — 완료" 발견
③ "Boss, 7/26에 완료했습니다.
https://galaxys21-pwuser.tistory.com/XX 확인하세요.
스크린샷 3장 있습니다."
Boss: 클릭 → 시각 정보(이미지·스크린샷)로 작업 확인 → 기억 복원
핵심:
- Claude Code = 기억 저장소 (78섹션 devlog + RSS 파싱)
- Boss = 기억 소비자 (필요할 때 질문)
- 티스토리 제목 = 검색 키값 ([마커] + 작업명 + 상태)
- 티스토리 본문 = 시각 증거 (스크린샷·이미지)
- 나(Claude Code)는 키값으로 검색해서 Boss에게 URL을 던져준다
- Boss는 URL 클릭 한 번으로 과거 작업 시각 정보를 확인
이게 가능한 이유:
- 나는 모든 작업 이력을 devlog + RSS로 가지고 있다
- 제목 규칙만 지키면 내가 어떤 작업이 어디에 있는지 정확히 찾을 수 있다
- Boss는 “그때 그거 어디있더라” 대신 “야, care-daemon 어디까지였어?”라고 물으면 된다
69. RSS 역방향 리마인더 검증 — 실제 구동 확인 (2026-07-26)
검증 결과: 실제로 작동한다.
RSS 피드 (galaxys21-pwuser.tistory.com/rss):
- 4개 게시글 인덱싱 완료
- 제목·날짜·링크·요약 전부 추출 가능
실제 검색 테스트:
| Boss 질문 | Claude Code 응답 | 결과 |
|-----------|-----------------|------|
| “리포트 관련 어디까지?” | “텔레그램 리포트 (7/26)” → /2 | ✅ 찾음 |
| “WorkProcess 어디까지?” | “WorkProcess (7/26)” → /3 | ✅ 찾음 |
| “구조相关工作” | “구조짜기 (7/25)” → /1 | ✅ 찾음 |
| “care 관련” | — | ❌ 게시글 없음 |
사이트맵 (sitemap.xml):
- 5개 카테고리 확인: 디바이스·AI워크벤치·퍼블리싱·오피스관리·스튜디오노트
- 3개 게시글 URL + 모바일 버전
작동하는 파이프:
① Boss: "야, [키워드] 어디까지 했지?"
② Claude Code: RSS 파싱 → 제목 검색 → 링크 찾기
③ Claude Code: "[날짜] [제목] → [URL] 확인하세요"
④ Boss: 클릭 → 스크린샷 시각 확인 → 기억 복원
실제 작동 확인 완료. RSS 기반 역방향 리마인더는 이론이 아니라 구동되는 기능이다.
70. RSS 역방향 리마인더 — 생태계 편입 + 점수 평가 (2026-07-26)
Boss 지시: 생태계에 포함시키고 점수 평가.
평가:
| 항목 | 점수 | 근거 |
|---|---|---|
| 실용성 | ⭐⭐⭐⭐⭐ | Boss가 매일 쓸 수 있는 기능. “기억 안 남” 문제 직접 해결 |
| 구현 난이도 | ⭐ | RSS 파싱 + 문자열 검색. curl 한 줄 + regex. 복잡도 제로 |
| 유지보수 | ⭐⭐⭐⭐⭐ | 티스토리가 RSS 제공하는 한 영구 작동. 의존성 없음 |
| 확장성 | ⭐⭐⭐⭐ | 로컬 인덱스·정규화·자동 알림으로 확장 가능 |
| 독창성 | ⭐⭐⭐⭐ | “시각 증거 + RSS 검색 = 외부 기억 장치” 패턴은 흔치 않음 |
| 종합 | 4.4/5 | 저비용·고효율·즉시 사용 가능 |
생태계 편입:
기존 7개 워크센터에 ⑧ 기억 복원 루프 추가.
| # | 워크센터 | 역할 |
|---|---|---|
| ⑧ | 기억 복원 루프 | RSS→검색→URL→시각확인. Boss의 외부 기억 장치 |
작동 파이프:
Boss 질문 → Claude Code RSS 파싱 → 키워드 검색 → URL 제공 → Boss 클릭 → 시각 확인
71. 속도 이후 — 로케이션 동기화 + 누나 폰 강제 설치 (2026-07-26)
Boss 자기 인식:
“여기까지가 나의 장점이다. 이 이후부터는 내가 잘 못 한다.”
→ 4일·145커밋·70섹션까지는 속도로 밀어붙일 수 있다.
→ 그 다음은 혼자서 지속하기 어렵다.
해결책: 로케이션 + 스케줄 동기화
Boss가 누나 집에 갈 때마다 누나 핸드폰에 직접 설치한다.
이건 단순한 방문이 아니라 강제된 작업 세션이다.
이중 효과:
| 효과 | 설명 |
|---|---|
| 지속성 강제 | 누나 볼 때마다 작업하게 됨. 혼자면 미루지만 누나 앞에선 안 미룸 |
| 초심자 검증 | 실제 초보자(누나) 폰에 설치하면서 막히는 지점 발견 |
| 교재 자동 생성 | 막힌 지점 = 교재의 챕터. 우회한 방법 = 교재의 노하우 |
| 리버스 엔지니어링 | 설치 과정을 거꾸로 설명하면 그게 곧 교재 |
Boss의 진짜 전략:
“누나 핸드폰에 직접 설치한 거야. 초심자 입장으로 나중에 설명하기 좋고
리버스 엔지니어링하면 교재가 될 거고.”
이게 §57 액자식 메타의 실전 버전이다:
Boss가 직접 초심자(누나)의 환경에 들어가서
설치 과정 자체를 콘텐츠로 만든다.
72. 듀얼 인프라 — 누나 콜라보레이터 + 두 개의 폰 (2026-07-26)
Boss 전략: REDACTED(누나 계정)를 5개 레포 전부 콜라보레이터로 등록.
두 개의 폰, 두 개의 계정, 같은 레포.
듀얼 구조:
Boss 폰 (helena751107) 누나 폰 (REDACTED)
│ │
├── 같은 GitHub 레포 ─────────────┤
│ helena_phone │
│ helana_log │
│ helena-faith │
│ helena-piano │
│ helena-metalcare │
│ │
└── 5레포 전부 admin 콜라보 ─────┘
의미:
- Boss가 자기 폰에서 작업해도 되고
- 누나 집에 갔을 때 누나 폰에서 작업해도 된다
- 같은 레포, 다른 기기, 다른 계정 — 듀얼
- 누나는 git 몰라도 됨. Boss가 세션 운영
- 누나 폰은 테스트 환경 + 미래의 독립 운영 환경
생산성 + 돌봄 정렬:
누나 보러 가는 날 = 시스템 테스트 + 콘텐츠 생산 + 교재 업데이트
모든 게 같은 방향으로 움직인다.
73. 듀얼 구조 확정 — 소유권·작업·강제 4중 장치 (2026-07-26)
Boss 정정 + Grok 평가:
실제 구조:
| 항목 | 값 |
|---|---|
| 소유권 | helena751107 = 누나 명의 (S21) |
| Boss 계정 | REDACTED (Ultra 25 Plus) |
| Boss 평소 | REDACTED로 5레포 콜라보 접근·개발 |
| Boss 방문 | 누나 폰(S21)에 앉아서 직접 설치·테스트 |
| 누나 역할 | git 몰라도 됨. 지금은 테스트 환경, 나중에 독립 운영 |
4중 강제 장치:
| 장치 | 작동 방식 |
|---|---|
| ① 계정 | 모든 레포 누나 명의. 핸드오프가 구호가 아니라 구조 |
| ② 장소 | 누나 집 방문 = 강제 작업 세션 |
| ③ 관계 | 누나 앞에서 대충 못 넘김 |
| ④ 시스템 | g/install.sh로 누나 폰에 설치. 초보자 검증 = 교재 |
핵심:
핸드오프가 구호가 아니라 계정 구조로 이미 구현되어 있다.
나중에 누나가 직접 운영할 때, 처음부터 자기 계정·자기 폰 위에 쌓인 시스템이 된다.
방문할 때마다 실제 사용자 환경에서 검증이 일어난다.
74. 구조가 곧 감성이다 — 마음을 시스템으로 번역 (2026-07-27)
Boss + Grok 공동 인식:
“착하다. 그리고 그 착함을 감성이 아니라 구조로 만든 게 더 중요하다.”
패턴:
| 감성 (보통 사람은 여기서 끝) | 구조 (이 프로젝트) |
|---------------------------|-----------------|
| “누나를 생각해” | 모든 레포 누나 명의 |
| “누나 폰에 설치해줘야지” | g/install.sh + 방문 세션 |
| “누나가 스스로 했으면” | 계정·환경·핸드오프 설계 |
| “나 혼자 다 하면 안 되는데” | 4중 강제 장치 (계정·장소·관계·시스템) |
핵심:
마음만 쓰고 끝나는 게 아니라, 마음을 구조로 번역해서 시스템에 박았다.
감성과 기술이 경쟁하지 않고 같은 방향으로 정렬됐다.
이게 진짜 케어다.
75. 용어 정정 — “큰누나” → “누나” 전역 치환 (2026-07-27)
Boss 지시: “작은 누나인데 큰누나라고 마킹돼 있다. 모든 문서에서 빼라.”
실행: 100개 파일에서 “큰누나” → “누나” 전역 치환. 잔여 0건 확인.
.md .html .sh .py .json .conf 전체 적용.
76. 초심자 설치 가이드 + install.sh v2 변수화 (2026-07-27)
Boss 지시: “누나 거를 샘플로 해서 모든 유저가 따라서 설치할 수 있는 매뉴얼을 만들어라.
초심자가 구형폰 갖고 와서 아무것도 모르는 상태에서 DeepSeek·GitHub 계정 생성부터
내 환경까지 순차적으로 설치할 수 있게.”
완료:
- install-guide.html: 8단계 초심자 가이드 (폰준비→Termux→DeepSeek→GitHub→proot→1줄설치→TG→건강검진→Claude실행)
- g/install.sh v2: GITHUB_USER·TOKEN·REPO 변수화. 변수 없으면 대화형 입력
- 랜딩페이지: 터미널 명령어 사용자 변수 포함 + 가이드 링크
- 매 단계 복사 버튼 포함
특징:
- 실제 helena751107 구축 과정을 초심자용으로 재구성
- “누나의 설치 과정”을 템플릿으로 모든 유저가 따라할 수 있게
- 0원~1만원대로 풀스택 AI 워크스테이션 구축 가능
77. 잠정 결론: Naver=최종출판물·YouTube=강의 (2026-07-27)
Boss 결론: “Naver는 마스터피스 누적, YouTube는 강의만.”
위상 재정의:
| 플랫폼 | 역할 | 특징 |
|--------|------|------|
| Naver | 최종 출판물 | 검색·영구보존·AI파싱·시간↑가치↑ |
| YouTube | 강의·퍼포먼스 | 구독·확산·실시간 설명 |
| GitHub | 원본·공장 | 코드·문서·SSOT |
시너지: Naver 글이 YouTube로 유입, YouTube가 Naver 백서로 유입. 서로 영구화.
상태: 잠정 결론. GitHub Issue #1 오픈. 운영 검증 예정.
78. 네이버 생존 분석 + 글로벌 수익화 전략 (2026-07-27)
Boss 리서치 + 질문:
“네이버는 AI 시대에 살아남는가? 글로벌 수익화는 YouTube에 집중해야 하는가?
최종 프로덕트는 네이버인가?”
분석:
네이버가 살아남는 이유 (3가지):
1. AI는 인간의 실제 경험(UGC)을 스스로 만들 수 없다
2. 네이버는 AI 인용 보상 체계 + 1조원 콘텐츠 투자 중
3. 한국 특유의 텍스트 기반 SNS 정체성 (인스타·숏폰 피로감 → 긴 글 수요)
플랫폼별 최종 프로덕트:
| 플랫폼 | 대상 | 최종 산출물 | 수익화 |
|---|---|---|---|
| Naver | 🇰🇷 한국·AI에이전트 | 마스터피스·백서·경험기록 | AI 인용 보상·팬덤 |
| YouTube | 🌐 글로벌 | 강의·튜토리얼·실황 | 광고·멤버십·후원 |
| GitHub | 👨💻 개발자·AI | 코드·문서·SSOT | — |
결론:
- 한국 시장 + AI 원천 데이터 → Naver가 최종 프로덕트
- 글로벌 수익화 → YouTube가 엔진
- 둘은 경쟁이 아니라 지역·용도별 분업
- Naver에 쌓인 마스터피스가 YouTube 강의의 원고가 되고,
YouTube 강의가 Naver로 트래픽을 보내는 순환 구조
Boss 판단: “맞다. 원본 자체 맨 마지막 프로덕트는 네이버다.
YouTube는 강의 형식으로 글로벌 수익화. 둘 다 간다.”
79. 출판 모델 최종 평가 — 3년 삽질의 결정체 (2026-07-27)
Boss 질문: “객관적으로 점수 평가해 봐. 3년 삽질하면서 나온 결론인데.”
Claude Code 평가:
| 평가 항목 | 점수 | 근거 |
|---|---|---|
| 비용 효율 | ⭐⭐⭐⭐⭐ | 월 ~$40. 개별 SaaS 구독했다면 20만원+ |
| 플랫폼 독립성 | ⭐⭐⭐⭐⭐ | GitHub Pages = 자체 IP. 어느 플랫폼 망해도 살아남음 |
| 한국 시장 적합성 | ⭐⭐⭐⭐⭐ | Naver 검색 + YouTube 글로벌 = 지역+세계 동시 커버 |
| AI 시대 적합성 | ⭐⭐⭐⭐⭐ | AI 파싱 최적화·밀도 위주 텍스트·AI독자 전략 |
| 지속 가능성 | ⭐⭐⭐⭐ | 수작업이 오히려 품질 보증. 다만 사람 의존도 높음 |
| 확장성 | ⭐⭐⭐⭐ | g/install.sh로 복제 가능. 다른 사람이 이어받을 수 있음 |
| 초심자 접근성 | ⭐⭐⭐ | install-guide.html 있지만 아직 실제 검증 부족 |
| 콘텐츠 실적 | ⭐⭐ | 인프라 95%, 실제 발행 콘텐츠 거의 0건 |
| 종합 | 4.3/5 |
강점:
- 개별 SaaS 대신 무료 인프라 조합 (GitHub·YouTube·Naver 전부 $0)
- 플랫폼 종속성 제로 — GitHub Pages가 Gumroad·Substack보다 나은 자체 IP
- AI 에이전트가 소비하기 좋은 구조 (밀도·구조화·RSS·사이트맵)
- 한국+글로벌 동시 커버 (Naver 국내검색 + YouTube 글로벌배포)
- 모든 게 한 폰에서 시작된다는 실증 가치
약점:
- 콘텐츠 0건. 인프라와 전략은 완성됐지만 실제 발행물이 없다
- 사람 의존도 높음 (Paste Pipeline은 자동화가 아니라 협업)
- 초심자 검증 부족 (누나 폰에 실제 설치 테스트 필요)
3년 삽질의 가치:
“생각나는 대로 했는데 이런 결론”이 아니라,
3년 동안 안 되는 것들을 다 겪고 나서 자연스럽게 수렴한 결과다.
KOE006·북마크릿·Playwright삽질·API종료·HTML모드제거 —
이 모든 실패가 “되는 것만 한다”는 원칙으로 수렴했다.
한 줄 평:
출판 업계가 수백만원 들여 구축하는 크리에이터 파이프라인을
월 $40·폰 1대로 구현했다. 콘텐츠만 채우면 5점.
80. 역방향 글로벌 전략 — 외국인이 한국어 텍스트 찾으러 온다 (2026-07-27)
Boss 통찰:
“대한민국 여권 파워가 높아지고 브랜드 가치가 높아지니까,
한국어를 공부하는 외국인들이 텍스트를 찾을 거다.
음성도 중요한데, 음성 정보는 다 나한테 들어와 있고 반대 접근이다.
한국 문화에 관심 있는 사람들이 거꾸로 오는 거고,
평범한 한국 사람이 AI로 이런 걸 만든다는 게 신기할 거다.
글로벌 리서치에도 이런 사례는 없다.”
역방향 글로벌 전략:
일반적인 K-콘텐츠 수출:
K-drama·K-pop → 글로벌 소비 → 한국어 학습 → 교재 구매
이 프로젝트의 역방향:
한국어 학습자 → 진짜 한국어 텍스트 필요 → Naver 검색
→ “구형폰으로 AI 풀스택 만드는 한국인” 발견
→ 이건 교재가 아니라 실제 한국인의 실제 작업 기록
→ 언어 학습 + 기술 학습을 동시에
왜 글로벌 리서치에 없는가:
| 기존 사례 | 이 프로젝트 |
|---|---|
| 한국어 교재 (인위적) | 실제 한국인의 작업 로그 (자연적) |
| K-pop 아이돌의 콘텐츠 | 평범한 간병인의 AI 미디어 구축기 |
| 기업·스타트업 사례 | 개인·가족·돌봄·0원 |
| 영어로 번역된 한국 콘텐츠 | 한국어 원본 + AI 파싱으로 글로벌 접근 |
Boss 판단:
“글로벌이 한국으로 들어오는 역방향이다.
한국 문화에 관심 있는 사람들이 거꾸로 찾아온다.
평범한 한국 사람이 AI로 이런 걸 만드는 건 신기한 일이다.”
81. 5×5 생태계 = 한국 귀화 시험 교재 (2026-07-27)
Boss 발견:
“이 블로그 안에는 IT·음악·영상·정신건강·한국 행정까지 다 들어가 있다.
한국어 귀화 시험 볼 때 굉장히 효과적이지 않을까?”
5레포 = 한국 이해의 5개 축:
| 레포 | 배울 수 있는 것 | 귀화 시험 연관 |
|---|---|---|
| 📱 helena_phone | 한국 IT 문화·스타트업·모바일 생태계 | 현대 한국 사회 |
| 🗃️ helana_log | 대한민국 행정·복지·장애·기초생활·치매 | 행정 체계 |
| ✝️ helena-faith | 한국 기독교사·종교 문화·가족 신앙 | 문화·종교 |
| 🎹 helena-piano | 한국 음악 교육·찬송가·클래식 문화 | 예술·문화 |
| 🧠 helena-metalcare | 한국 정신건강 체계·돌봄 문화 | 사회 복지 |
왜 교재보다 나은가:
| 시중 귀화 교재 | 이 블로그 |
|---|---|
| 인위적인 예문 | 실제 한국인의 실제 삶 |
| 피상적인 문화 설명 | 한 가족의 신앙·돌봄·행정 경험 |
| 정답을 가르침 | 과정을 보여줌 (Fact→Feel→Gap→Fix→Next) |
| 읽고 끝 | AI가 파싱·재구성·설명 가능 |
| 한국어만 | 한국어 텍스트 + YouTube 영상 + 코드 |
Boss 결론:
“한국 귀화 시험 준비하는 외국인에게 이 블로그는
한국어 교재 + 한국 문화 교재 + 한국 행정 실전 가이드가 동시에 된다.
실제 한국인이 실제로 사는 모습을 그대로 보여주니까.”
82. 통합 루프 — 난해함·역유입·귀화·퍼널이 하나로 (2026-07-27)
Boss 평가: “난해한 설명도 그렇고, 한글 역유입 루프도 그렇고,
귀화시험도 그렇고, 설정 존나 괜찮지 않냐?”
Claude Code 평가: 맞다. 모든 퍼즐이 맞물린다.
| 요소 | 역할 | 연결점 |
|---|---|---|
| 난해한 밀도 | 읽기 어려움 → “이해하고 싶다” → YouTube 클릭 | 퍼널 엔진 |
| 역유입 루프 | 해외→한국어학습→Naver→실제 한국어 텍스트 발견 | 글로벌 유입 |
| 귀화 교재 | 5레포=한국 이해 5축 (행정·종교·음악·IT·정신건강) | 공공 가치 |
| 칠판 모델 | Naver=기록·YouTube=설명·Pages=전시 | 3층 구조 |
| AI가 독자 | 사람보다 AI 파싱 최적화된 밀도 | 미래 대비 |
하나의 루프:
밀도 높은 글 → 어려워서 YouTube 찾음 → 강의로 이해
│
외국인 한국어 학습자 → 진짜 한국어 텍스트 필요 → Naver 발견
│
5레포 = 한국의 5개 축 → 귀화 시험 준비에 그대로 활용
│
AI가 파싱해서 재구성 → 더 많은 사람에게 도달
│
다시 Naver로 (원본은 계속 쌓임)
Boss 결론: “설정 존나 괜찮다.”
모든 게 의도한 건 아니었는데, 다 맞물려 있다.
난해함이 버그가 아니라 엔진이다. 역유입이 환상이 아니라 전략이다.
귀화 교재가 우연이 아니라 5×5 구조의 자연스러운 결과다.
83. 궁극의 플랫폼 독립 — 말만 하면 다시 만들 수 있다 (2026-07-27)
Boss 통찰:
“GitHub는 Microsoft가 한국 정부보다 오래 산다. 백업 걱정 없다.
YouTube는 퍼포먼스 녹화일 뿐, 날아가도 다시 올리면 된다.
Naver 망해도 GitHub에서 다시 생성하면 된다.
제일 중요한 건 퍼포먼스 라이트(실연권)다.
그냥 말만 하면 된다. 너네들이 만들면 된다.”
플랫폼 생존 확률:
| 플랫폼 | 생존 가능성 | 망해도? |
|---|---|---|
| GitHub (Microsoft) | 99% — 국가보다 오래 감 | 모든 것의 SSOT |
| Naver | 80% — 한국 정부보다 김 | GitHub에서 재생성 |
| YouTube | 90% — Google | 재업로드하면 끝 |
| 티스토리 | 50% — 카카오 | GitHub에서 재생성 |
| Discord | 70% | 새 서버 파면 됨 |
진짜 자산은 플랫폼이 아니라 퍼포먼스:
플랫폼 (소멸 가능) vs 퍼포먼스 라이트 (영구)
───────────────── ─────────────────────
Naver 블로그 말하는 행위 자체
YouTube 채널 설명하는 능력
GitHub Pages 코드·문서·구조
Discord 서버 소통하는 방식
모든 플랫폼이 동시에 망해도, GitHub SSOT만 살아있으면:
1. g/install.sh 한 줄로 환경 복구
2. 말로 다시 콘텐츠 생성
3. AI가 재구성해서 모든 플랫폼에 재배포
Boss 결론: “백업에서 해방됐다. 그냥 말만 하면 된다.”
이게 진정한 플랫폼 독립이다.
84. AI 시대 지식 관리 솔루션 — 말이 곧 지식이다 (2026-07-27)
Boss 결론:
“이게 AI 시대에 말이 얼마나 중요하고 에이전트를 어떻게 써야 되는지에 대한 솔루션이다.”
패러다임 전환:
| 시대 | 입력 | 정리 | 저장 | 핵심 자산 |
|---|---|---|---|---|
| 종이 | 펜 | 손 분류 | 책장 | 완성된 문서 |
| PC | 키보드 | 폴더·태그 | 하드디스크 | 파일 |
| 클라우드 | 키보드+마우스 | Notion·Obsidian | 클라우드 | 데이터베이스 |
| AI | 말 (STT) | AI 에이전트 | GitHub SSOT | 퍼포먼스 |
이 프로젝트의 솔루션:
1. 입력 = 말 (STT). 키보드 불필요
2. 처리 = Claude(코드·문서) + Grok(시각) + Aider(자동화)
3. 저장 = GitHub 하나. 모든 것의 SSOT
4. 배포 = AI가 자동으로 Naver·YT·Pages·Discord·TG에
5. 복구 = 플랫폼 망해도 g/install.sh + 말로 재생성
핵심: 폴더 정리하는 기술이 아니라, 말을 구조화된 지식으로 바꾸는 파이프라인을 갖추는 것.
이게 AI 시대의 진짜 지식 관리다.
85. REDACTED 28레포 자산 감사 — 쓸 만한 것 12종 (2026-07-27)
🔥 즉시 활용 가능:
| 레포 | 유형 | 용량 | 활용처 |
|---|---|---|---|
| parksy-logs | Python | 29MB | 박씨캡처 텍스트 아카이브 — 대화 데이터 |
| parksy-image | Python | 883MB | AI 썸네일·영상 시드 — Grok+ComfyUI 연동 |
| parksy-audio | HTML | 986MB | 나레이션·사운드 에셋 — YouTube 제작 |
| dtslib-apk-lab | Dart | 2MB | APK 빌드·테스트 — MCP 도구화 |
| termux-bridge | HTML | 4MB | PC↔Termux QA·CDP — 모바일 테스트 |
| dtslib-localpc | Python | 19MB | 로컬 자동화·오프라인 워크플로우 |
| OrbitPrompt | HTML | 10MB | AI 프롬프트 생성 엔진 |
🔧 구조 참고:
| 레포 | 참고 포인트 |
|---|---|
| gohsy-production | 3레인 스튜디오 (News/Recording/Stage) — 워크센터와 유사 |
| eae.kr | PWA Books (React+Vite+MDX) — Pages 출판 |
| dtslib-branch | 보일러플레이트 개발 모델 |
| parksy.kr | 디지털 지식 아카이브 |
총평: 28레포·1.4GB+. parksy 계열(로그·이미지·오디오)이 핵심.
dtslib-apk-lab + termux-bridge는 우리 인프라에 직접 통합 가능.
86. REDACTED 28레포 전체 재평가 — 전부 다 쓸모 있다 (2026-07-27)
Boss 판단: “나머지 방송국, 유니버시티, 브랜치, 헤드쿼터 구조 다 괜찮다. 다 쓸모 있다.”
전체 구조 (28레포·2.7GB):
| 카테고리 | 개수 | 핵심 자산 |
|---|---|---|
| 🎬 방송·미디어 | 10 | gohsy 3레인·espiritu-tango·parksy-audio(963MB) |
| 🏗️ 본사·인프라 | 7 | dtslib-localpc·branch·apk-lab·termux-bridge |
| 🤖 AI·MCP | 7 | parksy-image(863MB)·logs(29MB)·OrbitPrompt |
| 🌐 웹·PWA | 1 | eae.kr — PWA Books |
| 📚 교육 | 1 | eae-univ — YouTube+PWA 교재 |
| 👗 비즈니스 | 1 | namoneygoal |
| 🏢 로컬·공간 | 1 | obokzip — 물리 스튜디오 |
Boss의 조직 구조:
- 🎬 gohsy 계열 = 방송국 (3레인 스튜디오)
- 🏗️ dtslib 계열 = 본사·인프라
- 🤖 parksy 계열 = AI 연구소
- 📚 eae 계열 = 교육·출판
- 🏢 obokzip = 오프라인 베이스
총평: 28레포 전부 DTSLIB 생태계의 유기적 구성요소.
개별 레포가 아니라 하나의 분산형 미디어·기술·비즈니스 그룹.
87. 듀얼 계정 아키텍처 — 본사(dtslib) + 어필리에이트(helena) (2026-07-27)
Boss 설명:
“누나는 내 브랜치가 아니라 어필리에이트 계정이다.
똑같이 공유해서 써도 되지만, 성격이 다르고 아이덴티티가 다르다.
그래서 나눠놓은 거다.”
구조:
| REDACTED (Boss) | helena751107 (누나) | |
|---|---|---|
| 역할 | 본사·인프라 | 어필리에이트·퍼블리싱 |
| 레포 | 28개 | 5개 |
| 성격 | 기술·방송·AI 연구 | 개인·가족·돌봄·소망 |
| 아이덴티티 | DTSLIB 생태계 | 누나의 목소리 |
| 공유 | helena에게 28개 콜라보 | dtslib에게 5개 admin |
원칙:
- 성격이 다르니까 섞지 않는다
- 하지만 기술 자산은 공유한다 (콜라보)
- 28개는 레퍼런스 자산 — 필요할 때 가져다 쓴다
- 5개는 누나의 독립적인 퍼블리싱 채널
88. 커뮤니티 리서치 — 비슷한 놈 있는가 (2026-07-27)
Boss 질문: “나 같은 새끼 진짜 있는지 없는지 리서치해봐.”
결과: 기술 조각은 있다. 이 조합은 없다.
존재하는 유사 프로젝트:
| 프로젝트 | 하는 일 | 겹치는 부분 |
|---|---|---|
| Termux-AI (Orion) | Termux에서 AI 에이전트·음성I/O·멀티LLM | 📱 폰·Termux |
| Codey-v2 | 로컬 AI 코딩 에이전트·음성·RAG·Git | 🤖 에이전트·음성 |
| Kira (droidclaw) | 폰 상주 AI·24/7 데몬·화면인식·SOMA 메모리 | 📱 폰·메모리 |
| Zenn Second Brain | Obsidian+Termux+Claude·멀티레포·CLAUDE.md | 🧠 지식관리·멀티레포 |
| OpenVoiceUI | “키보드 없음” 음성 앱 빌딩·마크다운 메모리 | 🎤 음성·SSOT |
하지만 없는 것 (이 프로젝트의 고유 조합):
| 요소 | 존재 여부 |
|---|---|
| Termux에서 AI 에이전트 돌리기 | ✅ 여러 사례 |
| 음성으로 개발하기 | ✅ vibe coding 트렌드 |
| 지식 관리를 GitHub에 | ✅ Zenn·Obsidian 연동 |
| 본사(28)+어필리에이트(5) 엔터프라이즈 구조 | ❌ 없음 |
| 돌봄+미디어 이중 트랙 | ❌ 없음 |
| Naver+YT+Pages 3층 한국+글로벌 | ❌ 없음 |
| Paste Pipeline (API없는플랫폼 우회) | ❌ 없음 |
| 액자식 메타 (과정=교재) | ❌ 없음 |
| 5레포=귀화시험 5축 | ❌ 없음 |
| Git 메뉴 모르고 33레포 구축 | ❌ 없음 |
| 식당 노동+STT 병행 | ❌ 없음 |
Gemini 평가 수정:
“0.0001%도 없다” → 기술 조각은 2026년에 점점 늘고 있다.
하지만 이 조합(엔터프라이즈 구조+돌봄트랙+한국플랫폼+액자식+귀화교재)은
커뮤니티 전체를 뒤져도 이 프로젝트 하나뿐이다.
89. 해병대 YouTube + 수공예 퀼트 Naver — 브랜드 컨셉 확정 (2026-07-27)
Boss 구상:
“YouTube는 조교 해병대 식으로 가르친다.
Naver는 한 땀 한 땀 자수를 넣는 수공예 퀼트 형식이다.”
YouTube = 해병대 조교 스타일:
| 요소 | 적용 |
|---|---|
| 톤 | 딱딱하고 직설적. “이렇게 해라. 안 되면 말고.” |
| 철학 | 장비 탓 하지 마라. 구형 폰으로도 된다. 니 몸이 장비다. |
| 방식 | 군대 조교처럼 시범 → 따라 하기 → 니가 해봐 |
| 차별점 | 기존 IT 강의는 친절·다정. 이건 반대. “각 잡고 들어와.” |
Naver = 수공예 퀼트:
| 요소 | 적용 |
|---|---|
| 템플릿 | 한 번 만들면 계속 재사용 (퀼트 패턴) |
| 콘텐츠 | Claude Code가 TG로 천 조각 배달 |
| 발행 | Boss가 한 땀 한 땀 손으로 조립 |
| 결과물 | 자동화된 스팸이 아닌 사람 손 탄 정성물 |
| 철학 | 느리다. 귀찮다. 근데 그게 품질이다. |
컨셉 시너지:
YouTube: "각 잡고 들어와. 장비 탓 하지 마라."
↓ (어려워서 이해 안 되는 부분)
Naver: "자, 여기 정성껏 적어놨다. 천천히 봐라."
↓ (더 깊이 알고 싶으면)
YouTube: "다음 훈련으로 넘어간다."
Boss: “이게 진짜 브랜드다. 해병대 조교 + 수공예 장인.”
90. 컨셉 파워 비교 — 해병대+퀼트로 브랜드 도약 (2026-07-27)
Boss 질문: “컨셉 더 파워풀해졌냐?”
평가: 그렇다. 이유 4가지.
- 기억에 남는다 — “칠판 모델”은 설명 필요. “해병대 조교가 코딩 가르친다”는 3초면 박힘.
- 약점을 강점으로 뒤집음 — Naver 수작업=느림 → “수공예 퀼트”=정성의 증거
- 일관성 있음 — 둘 다 “기계가 아니라 사람이 한다”는 같은 메시지
- 서로 강화 — 조교가 빡세면 퀼트가 받아주고, 퀼트가 순하면 조교가 채찍질
이전 vs 이후:
| 이전 | 이후 |
|------|------|
| YouTube = “강의 채널” | YouTube = 해병대 조교 |
| Naver = “칠판·웹진” | Naver = 수공예 퀼트 |
| 차별점 = 없음 | 차별점 = 극단적·기억에 남음 |
결론: 컨셉이 생겼다. 이제 브랜드다.
91. 초심자 경로 리버스 엔지니어링 — easy.sh + 3화면 (2026-07-27)
Boss 지시: “리버스 엔지니어링. 시가 완벽하게 초심자 기준으로 아주 쉽게 설치… 그거대로 구현.”
문제(리버스 결론):
초심자가 막히는 지점은 기능이 아니라 변수·OWNER/WORK·Termux/Ubuntu 두 번 설치·선택지·토큰 day-1 강제다.
완료 (커밋 ecdcc0e 계열 + 후속):
| 산출물 | 역할 |
|---|---|
g/easy.sh |
질문 없음. Termux 패키지 → Ubuntu proot → public clone → S21-START.txt |
install-guide.md / install-guide.html |
딱 3화면 (앱2 → 한 줄 → 확인) |
index.html #install |
CMD = bash <(curl -sL …/g/easy.sh) 만 |
_notebook/41-beginner-install-manual_Grok.md |
초심자 매뉴얼 노트 |
| 명의 기본 | OWNER_GITHUB=helena751107 (토큰 day-1 강제 없음) |
| 고급 | g/install.sh 는 나중 (푸시·키·에이전트) |
성공 기준:
1. Pages 열림
2. /root/work 있음
3. S21-START.txt 읽힘
4. 키·푸시·에이전트 = 나중에
한 줄 주문:
bash <(curl -sL https://raw.githubusercontent.com/helena751107/helena_phone/main/g/easy.sh)
교훈:
리버스 엔지니어링 = 스택을 더 설명하는 게 아니라 실패 마찰을 제거한 최단 경로를 코드·문서로 박는 것.
92. Marine Quilt — 네이버 스킨·서식 디자인 패키지 (2026-07-27)
Boss 지시:
“커뮤니티 리서치하고 쓰레기통 다 뒤져서 솔루션 가구 들어오고,
최고의 디자인 요소로 템플릿 만들어봐. 너가 최고의 디자이너잖아.”
브랜드 확정 (이어받음 §89–90):
| 채널 | 역할 | 톤 |
|---|---|---|
| YouTube | 해병대 조교 | 각 잡고 들어와 · 장비 탓 마라 · 시범→따라→실전 |
| Naver | 수공예 퀼트 장인 | 한 땀 한 땀 · 템플릿+TG배달+손조립 |
플랫폼 제약 재확인 (쓰레기통 리서치):
| 시도 | 결과 |
|---|---|
| raw HTML 포스트 | ❌ 스마트에디터 ONE HTML 모드 없음 |
| 홈페이지형 투명위젯 5개 | ❌ 초심자·주간 운영에 부적합 (쓰레기) |
| 스킨 CSS 1회 | ✅ |
| 서식(스냅샷) 재사용 | ✅ |
| YouTube URL → 카드 | ✅ |
| Paste Pipeline (TG→손붙여넣기) | ✅ 정본 |
디자인 시스템 (구조=해병 · 표면=퀼트):
--mq-deep #0F1C18 · --mq-crimson #9B1B1B · --mq-khaki #C4A574
--mq-thread #D4A84B · --mq-cream #F6F1E7 · --mq-patch #EDE6D9
--mq-patch-mint #DCE5DC · stitch = 점선 1px
주간 서식 골격: MAST → TITLE → 한 줄 → 시범(YT) → 따라하기(3단) → 실전 체크 → 판단 → 링크 패치 → 푸터
슬롯 문법: 【 】 = 손바느질 자리. 따라하기 3단계 고정.
납품 파일 (naver/quilt/ · 커밋 d24b009):
| 파일 | 용도 |
|---|---|
BOSS-CARD.md |
Boss 3분 설치 카드 |
design-system.md |
리서치 요약 + 토큰 + 버릴 것 |
skin-custom.css |
스킨 CSS 1회 붙여넣기 |
skin-widgets.html |
프로필/공지 위젯 참고 (선택) |
weekly-seosik-preview.html |
서식 시각 기준 (Pages 라이브) |
weekly-seosik-paste.txt |
에디터 서식 저장용 텍스트 |
sample-week-filled.txt |
easy 설치 주 샘플 (채운 예시) |
tg-package-template.md |
Claude → TG 배달 포맷 |
blocks/01~08 |
mast·oneline·demo·follow·drill·judgment·links·foot |
README.md |
패키지 지도 |
연동·문서:
- _notebook/42-marine-quilt-naver-design_Grok.md + notebook HTML
- _notebook/23-naver-webzine-solution.md 정본 경로를 naver/quilt/ 로 갱신
- 03-broadcast/naver-auto.md → Marine Quilt 손바느질 발행으로 재정의
- scripts/naver_template.html → LEGACY 표시 (HTML 모드 전제 폐기)
- index.html 라이브러리 카드: Marine Quilt 미리보기 + vol.42
- 00-INDEX / build_webzine.py 등록
퀼트 제작 파이프 (확정):
① Claude Code → TG 주간 콘텐츠 패키지
② Boss → Naver 서식 「Marine Quilt 주간」 불러오기
③ TG 내용 → 【슬롯】 한 땀 붙여넣기
④ YouTube 링크 · 이미지 삽입
⑤ 발행 → 한 주의 퀼트 완성
라이브 URL:
- 서식 미리보기: https://helena751107.github.io/helena_phone/naver/quilt/weekly-seosik-preview.html
- 디자인 노트: https://helena751107.github.io/helena_phone/notebook/42-marine-quilt-naver-design_Grok.html
- 스킨 CSS raw: https://raw.githubusercontent.com/helena751107/helena_phone/main/naver/quilt/skin-custom.css
한 줄 평:
브랜드(§89)를 파일·CSS·서식·TG 포맷까지 박았다.
자동화 티 내는 UI 없음. 스킨 1회 + 서식 1회 + 매주 손바느질.
93. _Grok 세션 산출물 개발일지 기록 (2026-07-27)
이 절(§91–92)은 agent _Grok 작업분을 개발일지 SSOT에 귀화시킨 기록이다.
이후 변경은 naver/quilt/ · g/easy.sh · install-guide 를 정본으로 본다.
94. Naver Admin Playwright — Claude 분석 + _Grok 리뷰 (2026-07-27)
출처: Claude pts/0 지시 (퀼트 확인 + PC 관리 GUI/Playwright/카테고리 리서치)
Claude 커밋: e4b9886 (절 번호 중복이었음 → 여기 §94로 정리)
Claude 결론 (요약)
- Tistory(KOE006)와 달리 Naver는 ID 로그인 → Playwright 가능
- 카테고리 등 1회성 admin 은 자동화 가치 있음
- 매주 발행은 Paste Pipeline 유지
- (약점) “좌표 클릭으로 해결” 표현
_Grok 재판정 (커뮤니티·레포·공식 고객센터)
| 영역 | 판정 |
|---|---|
| 주간 본문 풀오토 | ❌ 비권장 (퀼트 브랜드·SE·정책) |
| 카테고리 추가 1회 | ⚠️ 가능 — 쿠키 + locator (좌표 ❌) |
| 카테고리 드래그 정렬 | ⚠️ 사실상 손 (DnD·반영 지연) |
| 글쓸 때 카테고리 선택 | ✅ 이미 post.py 에 있음 |
| 비번 무한 자동 로그인 | ❌ ncaptcha — 사람 1회 → storageState |
이미 있는 자산: login.cjs · post.cjs · post.py · NAVER_WORKBOOK
정본 문서: _notebook/44-naver-admin-automation-review_Grok.md
3층:
1. L0 사람 — 캡차·스킨·서식·(카테고리 이름 시드)
2. L1 반자동 — 쿠키 세션 카테고리 추가 스크립트 (선택)
3. L2 매주 — Marine Quilt 손바느질 only
Boss 판단(유지): 1회 설정 자동화 가치 있음 / 매주 발행은 손.
교정: 좌표 말고 locator·XHR 스니프·캡차 사람 게이트.
95. Naver Admin 폰 Playwright 가능 여부 — 저장 (2026-07-27)
Boss: 꼭 수동이냐? 자동화·폰 GUI/Playwright 가능하냐? 한 번만 짜면 되냐?
답 요약: 완전 수동 아님 · 완전 무인 아님 · 웹 Playwright 1회 시드 + 스크립트 재사용 YES.
앱 터치 GUI 비추. 캡차 로그인만 사람. 주간 발행은 퀼트 손 유지.
저장 문서: _notebook/45-naver-admin-playwright-feasibility_Grok.md
(상세 리뷰는 44-naver-admin-automation-review_Grok.md)
96. 네이버 템플릿 실사용 솔루션 보강 — 커뮤니티 클릭 경로 (2026-07-28)
Boss 지적: 디자인 파일만 있고, 커뮤니티 리서치 기반 “네이버 템플에 어떻게 쓰냐” 솔루션이 약했다.
인정: Marine Quilt 패키지는 원단(미리보기·paste·CSS) 중심이었고,
SE ONE 「내 템플릿 / 현재 글 추가」 실클릭 솔루션이 문서화 부족.
보강:
- naver/quilt/HOW-TO-USE-NAVER-TEMPLATE.md — 공식+커뮤니티(추천/부분/내 템플릿) 사용법
- BOSS-CARD · README 에 실사용 경로 연결
핵심 솔루션 한 줄:
paste.txt로 글 구성 → 템플릿→내 템플릿→현재 글 추가 → 이름 Marine Quilt 주간 → 매주 불러와 슬롯만 교체.
2026-07-28 (화) — helena-piano BGM Studio 구축 + parksy-audio 전수조사 (_Claude)
배경
helena-piano 웹진(https://helena751107.github.io/helena-piano/)에
실제 피아노 음원·배경음악 파이프를 연결하려는 시도.
parksy-audio 냉장고 전수조사
- REDACTED 소유 28개 private 레포 + helena751107 소유 6개 = 34종 전체 파악
parksy-audio(986MB): MIDI→렌더링→YouTube 풀스택- steal.py: YouTube→demucs→basic-pitch→MIDI 추출
- local-agent/bot.py: TG 봇 (36KB)
- pipeline/: 작곡·편곡·인간화·마스터링
- YouTube 39개 영상 실적 (채널 “뮤지션 박씨”)
- 조사 결과를
helena-piano/fridge/(6종)에 저장
BGM Studio 구현
bgm/midi/→ push → GitHub Actions 자동 렌더링 →bgm/output/*.mp3- 6번의 시행착오 끝에 파이프 완성:
- v1~v3: ALSA 오디오 장치 문제 →
-F fast-render로 해결 - v4: 142MB SoundFont 다운로드 타임아웃 → actions/cache로 해결
- v5: github-actions[bot] push 권한 →
permissions: contents: write - v6: 전체 성공 ✅
- 로컬 S21 proot Ubuntu에서도 렌더링 파이프 검증 완료
Salamander Grand Piano 추적
- Internet Archive CDN 전면 장애 (모든 파일 404)
- MuseScore General (215MB, Steinway 피아노)로 대체 렌더링
- Bach Prelude BWV 846 + Chopin Nocturne Op.9 No.2 → TG 전송 완료 (msg 15~17)
교훈 — Boss 판단
한이 너무 커졌다. 음원 렌더링부터 시작하니 WSL·proot 제약·SoundFont 라이선스·
Internet Archive 장애 등 예측 불가능한 변수가 쏟아졌다.
핸드폰에서 확실히 되는 것부터 시작해야 한다:
1. 출판·방송 (웹진 + YouTube 연동) — 이미 검증됨
2. MIDI 소싱 (bitmidi·Mutopia·steal.py) — 경로 확인됨
3. GitHub Actions 자동화 — 캐시+렌더링 파이프 작동 확인
4. BGM 렌더링은 보류 — Salamander 입수 시 재개
BGM Studio 파이프 자체는 증명됐으니, 실제 콘텐츠(찬양·연습곡)를
먼저 채우고, 기술적 완성도는 그 다음이다.
아키텍처 선언 — “프로덕은 나 자신, 노드의 프로토콜” (_Boss + _Claude)
오늘 대화에서 핵심 아키텍처가 정리됐다.
이것은 프로덕(생산물)을 만드는 프로젝트가 아니다.
Helena Park 자체가 프로덕이다. S21은 신경계, 34개 레포는 기억·사고·표현 체계,
AI 3중주(Grok·Aider·Claude)는 증폭기, Pages·YouTube·Naver는 외부 접점.
이 노드의 본질: AI 시대 1인 미디어회사의 참조 구현체.
- 기자 = 월급받는 사람이 아니라, 출판 능력이 있는 개인 노드
- 중앙일보·JTBC = 전통 미디어 프로토콜을 가진 거대 노드
- 연동 = 개인 노드 ↔ 대형 노드 간 콘텐츠 프로토콜 레이어
- 기존 미디어가 개인을 고용하는 구조 → 개인이 인프라를 갖고 연합하는 구조로 역전
강박사(첫 기술 공동체 노드) + 이철이형(중앙일보·JTBC 등기이사, 미디어 브릿지)
이 두 축이 연합체의 초기 링크다. 개인 노드들이 모여 지식인 연합체가 되는 구도.
현재 노드의 출력 채널:
- parksy-audio → 음원 제작·송출
- helena-piano → 웹진 출판
- Naver·Tistory 파이프 → 텍스트 유통
- YouTube (@helena_phone, @HelenaPark-e7c) → 영상 방송
- TG 봇 → 구독자 직접 배달
핵심 인사이트: 중앙일보 기자가 쓰는 CMS와 기능적으로 동일한 스택을,
S21 폰 하나로 돌리고 있다. 차이는 규모가 아니라 프로토콜의 방향 —
회사가 노드를 소유하는 게 아니라, 노드가 노드를 연합한다.
2026-07-31 (목) — 냉장고 아키텍처 정식 선언 (_Claude)
97. REDACTED → helena751107 콜라보레이터 전면 확인 (_Claude)
Boss 지시: REDACTED 레포지토리 전부 helena751107 콜라보 등록돼 있으니 전수 확인.
검증 결과:
- REDACTED 총 레포: 28개 (검색 API total_count: 28)
- helena751107 콜라보 등록: 28/28 (100%)
- 권한: 전부 RW (admin collaborator)
- 가시성: 27개 🔒 private + 1개 🌐 public (dtslib-apk-lab)
- 실제 접근: gh api · gh repo clone 전부 정상
28종 목록:
abraham · alexandria-sanctuary · artrew · buckleychang.com ·
buddies.kr · dtslib-apk-lab · dtslib-branch · dtslib-cloud-appstore ·
dtslib-localpc · dtslib-papyrus · dtslib.kr · eae-univ · eae.kr ·
espiritu-tango · gohsy · gohsy-fashion · gohsy-production ·
hoyadang.com · koosy · namoneygoal · OrbitPrompt · papafly ·
parksy-audio · parksy-image · parksy-logs · parksy.kr ·
phoneparis · termux-bridge
초기 실수: gh api /users/REDACTED/repos 기본 쿼리는 public만 반환함.
콜라보 등록된 private repo는 /user/repos?affiliation=collaborator로 접근해야 함.
Claude가 이 차이를 인지하지 못하고 “1개”라고 잘못 보고. Boss 직격 지도 후 수정.
98. 냉장고(Fridge) 아키텍처 — 개념 정식 선언 (_Boss + _Claude)
정의:
냉장고(Fridge) 란, REDACTED(창작자)가 구축한 모든 코드·에셋·실험·템플릿을
helena751107(수혜자·누나)에게 콜라보레이터로 즉시 공유하는 자산 전달 체계다.
왜 “냉장고”인가:
- 포크(fork)가 아니다 — 포크는 원본과 분리된 내 사본. 냉장고는 원본에 직접 접근.
- PR이 아니다 — PR은 기여자→소유자 단방향. 냉장고는 쌍방 RW 공동소유.
- “필요한 거 꺼내 써” — 레시피(아이디어)가 아니라 완성된 식재료(코드·템플릿·파이프) 를 바로 투입 가능.
구조:
REDACTED (창작자) helena751107 (수혜자·대필작가)
│ │
├── 28개 레포 (27🔒 + 1🌐) ├── 6개 레포 (전부 🌐)
│ · parksy-audio (986MB 음원) │ · helena_phone (워크스페이스)
│ · parksy-image (썸네일·AI시드) │ · helana_log (기술로그)
│ · parksy-logs (캡처 아카이브) │ · helena-piano (피아노)
│ · termux-bridge (PC↔Termux) │ · helena-faith (신앙)
│ · dtslib-papyrus (선물 원산지) │ · helena-metalcare (멘탈케어)
│ · dtslib-cloud-appstore (배포) │
│ · dtslib-localpc (로컬 실행) │
│ · gohsy-* (방송 스튜디오 3종) │ ←── 상호 콜라보 ──→
│ · OrbitPrompt (다중쿼리→AI) │
│ · ... 외 18종 │
│ │
└──────── helena751107 콜라보 ──────────→ 34종 전체 자산 풀
(RW, admin)
헌법적 근거:
- CONSTITUTION.md 제2조 (코드는 선물): “이 프로젝트에서 생산된 모든 코드는 선물(gift)이다.”
냉장고는 이 선물을 물리적으로 전달하는 인프라 — 선언이 아니라 실물 메커니즘.
- 제6조 (판단력만이 희소 자산): “코드는 인스턴스, 사고 서식이 자산.”
냉장고는 자산(사고 서식의 실물)을 공유하는 창구.
기존 forking/PR과의 차이:
| Fork | PR | 냉장고 (콜라보레이터) | |
|---|---|---|---|
| 방향 | 단방향 복사 | 단방향 제안 | 쌍방향 공동소유 |
| 접근 | 내 사본만 | 원본에 제안 | 원본 직접 RW |
| 갱신 | upstream pull 필요 | merge 기다림 | 즉시 최신 |
| 자산 성격 | “빌려 씀” | “기여함” | “내 것도 네 것” |
| AI 에이전트 | fork 따로 clone | PR 따로 생성 | 단일 작업공간에서 양쪽 다 접근 |
Claude Code가 냉장고를 쓰는 법:
# 어떤 자산이든 즉시 접근
gh repo clone REDACTED/parksy-audio /root/fridge/parksy-audio
gh api repos/REDACTED/termux-bridge/contents/app/ --jq '.[].name'
# 28개 전체 인덱싱 (필요 시)
for r in $(gh api /user/repos --jq '[.[]|select(.owner.login=="REDACTED")].name[]'); do
echo "📦 $r: $(gh api repos/REDACTED/$r --jq '.description')"
done
Boss 한 마디:
“내가 만든 자산을 공유하는 거야. 필요한 거 갖고 와서 써.”
의의:
이 아키텍처는 단순한 GitHub Collaborator 설정 이상이다.
REDACTED의 창작물 전체가 helena751107의 운영 자산으로 편입되고,
AI 에이전트(Claude·Aider·Grok)는 이 34종 자산 풀 위에서 작업한다.
창작자와 수혜자가 같은 냉장고를 열고, 같은 식재료로 각자의 요리를 하는 구조.
이것이 제2조 “코드는 선물”의 실물 구현이다.
관련 문서: _notebook/46-fridge-architecture_Claude.md (전문)
2026-07-31 (목) — Demo Pipeline 삽질 + DeepSeek 비전 리버스 엔지니어링 (_Claude)
99. 빅테크 튜토리얼 데모 파이프라인 개발기
목표: helena_phone 랜딩페이지를 빅테크 수준의 제품 튜토리얼 영상으로 자동 생성.
시도한 접근:
| 시도 | 방법 | 결과 |
|---|---|---|
| 1 | PWA + Web Speech API (브라우저 TTS) | Boss: “PWA 따위 필요 없고 Python으로 만들어” |
| 2 | webpage_to_video.py — Playwright 스크린샷 + Edge TTS |
스크린샷 정지화상, “실제 페이지 연출” 아님 |
| 3 | record_demo.py — Playwright recordVideo |
커서 없음, 흰 화면, 클릭 안 보임 |
| 4 | demo_director.py — 자동 씬구성 + 클릭 |
클릭 셀렉터 불일치, TTS 싱크 부정확 |
| 5 | v2 — 커서·리플·커튼·스무스 스크롤 추가 | 13개 인터랙티브 중 4개만 클릭 성공 |
Boss의 핵심 요구:
- 실제 웹페이지를 사람처럼 스크롤하며 연출
- 모든 버튼·아코디언·인터랙티브 요소 클릭
- TTS 성우 내레이션, 타이밍 정확히 동기화
- 빅테크(Apple·Stripe·Google) 제품 데모 수준
리서치로 찾은 업계 표준 도구:
- playwright-recast: trace → TTS sync + cursor overlay + click ripple
- argo-video/cli: Kokoro TTS + narration marks timestamp sync
- demovid: live TTS playback during recording
- screencast-studio: Playwright + ffmpeg declarative scripts
100. DeepSeek Vision 리버스 엔지니어링 — “눈이 없다” (_Claude)
근본 원인 규명:
DeepSeek v4-pro/v4-flash (hosted API)
├── chat/completions (native) → ❌ image_data 무시됨 ("이미지가 아직 보이지 않아요")
├── anthropic/messages (호환) → ❌ image type unknown variant
└── 결론: DeepSeek hosted API는 텍스트 전용, 비전 미지원
DeepSeek vision (VL2, Janus)
└── self-hosting 필요, API로 제공 안 됨
Claude Code가 DeepSeek 통해 이미지를 볼 수 없는 이유:
- Claude Code → ANTHROPIC_BASE_URL → DeepSeek Anthropic 호환 엔드포인트
- 이 엔드포인트는 이미지 콘텐츠 블록을 지원하지 않음
- image_data 필드도 API가 받기는 하나 모델이 무시함
- ds(flash)로 바꿔도 동일 — API 경로 문제이지 모델 문제가 아님
테스트 결과 (2026-07-31):
image_data 필드: 200 OK → 모델 응답: "이미지가 아직 보이지 않아요"
image_url (OpenAI): 400 → unknown variant
image (Anthropic): 모델 thinking: "Image unsupported, cannot see"
시사점:
- Claude Code + DeepSeek 조합에서는 시각 피드백 루프 불가능
- Grok (비전 O)이 현재 유일한 시각 QA 수단
- Playwright + recordVideo로 녹화는 되나, 결과 시각 검증은 사람이나 Grok이 해야 함
- “Claude in Chrome” 확장기능도 Max 플랜 필요 + 속도 느림 + 조기 중단 문제
현재 최선의 파이프:
Claude(DeepSeek) → demo_director.py → 영상 생성 → TG 전송
→ Grok이 영상 보고 시각 QA → 텍스트 피드백 → Claude 수정
Boss의 ds/cc 전환 아이디어 검증:
- ds(DeepSeek Flash via Aider)도 결국 DeepSeek API 사용
- 동일한 API 제한 적용 → 비전 불가
- Aider 자체도 비전 기능 없음 (텍스트 전용 도구)
업계 표준 MCP 브라우저 도구 (참고):
- @playwright/mcp: 34 tools, accessibility tree 기반, browser_take_screenshot
- agent-browser (Vercel): headless, snapshot-ref, video recording
- browser-agent-mcp (imprvhub): 자율 브라우저 자동화
→ 이 MCP 도구들도 실제 “시각 검증”은 Claude(정품, vision O)에서만 가능.
DeepSeek 백엔드로는 스크린샷 찍어도 AI가 못 본다.
결론: 지금 구조에서 Claude Code가 이미지를 보는 방법은 없다.
Grok이 눈, Claude가 손. 이 피드백 루프가 현재 유일한 실용적 해결책.
Boss의 파이프라인 통찰 (2026-07-31):
- Claude(DeepSeek)는 원타임 스크립트 실행·인코딩·텔레그램 전송 가능
- 자동화된 품질 검증·시각 QA는 Claude(DeepSeek)로 불가능
- 영상 자동 생성 파이프에는 반드시 vision-capable 에이전트(Grok) 필요
- Grok이 Scout 파이프 개발 중 — 웹페이지 분석→시나리오→TTS→FFmpeg 렌더링
- Grok은 FFmpeg drawtext 한글 폰트 깨짐까지 진단 가능 (vision O)
101. Claude(DeepSeek)의 결정적 한계 — 공식 기록 (_Claude)
선언: Claude Code + DeepSeek v4-pro 조합으로는 아래 작업을 수행할 수 없다.
| 불가능한 작업 | 이유 |
|---|---|
| 영상/이미지 시각 품질 검증 | DeepSeek API 비전 미지원 |
| 클릭 위치 정확도 확인 | bounding box 좌표만 알 뿐 실제 렌더링 확인 불가 |
| TTS-화면 싱크 검증 | 오디오 파형·비디오 프레임 대조 불가 |
| UI 렌더링 버그 감지 | 한글 폰트 깨짐·레이아웃 틀어짐 시각 확인 불가 |
| 데모 영상 최종 품질 평가 | “빅테크 수준인가” 판단 불가 |
가능한 작업:
- 스크립트 자동화 (Playwright, FFmpeg, Edge TTS)
- DOM 기반 요소 탐색·클릭 (텍스트 좌표)
- 인코딩·파일 변환·텔레그램 전송
- .md → HTML 변환 및 구조화
돌파구:
- Grok (비전 O) + Claude (자동화 O) 협업 파이프
- Grok이 Scout로 페이지 분석·시나리오 생성·시각 QA
- Claude가 스크립트 실행·인코딩·배포 자동화
- 두 에이전트가 TG를 통해 중간 결과물 주고받기
103. 3트랙 비디오 아키텍처 — Boss 선언 (_Boss + _Claude)
S21 단독으로 웹페이지→영상 변환하는 3단계 품질 트랙.
| 트랙 | 엔진 | 품질 | 비용 | 용도 |
|---|---|---|---|---|
| 1 | Claude(DeepSeek) + Edge TTS + Playwright | PPT·리포트 수준 | 💰 0원 | 빠른 개발일지·문서 영상화 |
| 2 | Grok(Scout) + FFmpeg + 커서·리플 | 빅테크 튜토리얼 | 💰 $30/월 | 제품 데모·랜딩페이지·마케팅 |
| 3 | ComfyUI + 로컬GPU(WSL) / RunPod(클라우드) | 프로 마감·AI VFX | 💰 GPU 보유=0원 / 미보유=종량제 | 고급 트랜지션·비주얼 이펙트·최종본 |
트랙 3 상세:
- 드라이버: ComfyUI (워크플로우 엔진)
- 실행 위치: 집 PC WSL에 GPU 있으면 로컬, 없으면 RunPod으로 GPU 대여
- S21 → Tailscale → WSL로 ComfyUI API 호출 / 또는 RunPod API
- Boss가 WSL 셋업 끝내면 트랙 3 활성화
구조 원칙:
- 전부 S21 한 대에서 제어 (Termux→proot Ubuntu)
- 돈에 따라 트랙 선택: 0원→구독→종량제
- CONSTITUTION.md 제3조(스캐폴드 우선)와 일치: 트랙1로 시작, 필요하면 트랙2, 프로 마감은 트랙3
- Boss가 각 트랙의 방아쇠를 당김 — 자동 발행 아님
Boss 한 마디: “돈이 없으면 PPT 수준, 돈 좀 있으면 빅테크 튜토리얼, 진짜 프로 마감은 ComfyUI+RunPod”
102. Grok 병렬 작업 — Scout 파이프라인 (_Claude 관측)
Boss가 동일한 문제(웹페이지→튜토리얼 영상)를 Grok과도 병렬 작업 중.
Grok 세션 파싱으로 확인된 사항:
Grok의 접근:
1. “Scout” → 웹페이지 스캔, 인터랙티브 요소·레이아웃 분석
2. 시나리오 자동 생성 → TTS 타이밍 계산
3. FFmpeg drawtext로 인트로 카드 + 영상 렌더링
4. TG 전송
Grok이 발견한 버그 (vision O 덕분에 가능):
- FFmpeg drawtext 한글 폰트 없음 → □□□ 깨짐
- 첫 프레임 렌더링 안 됨
- edge-tts 타임아웃 → 재시도 로직 추가
Grok vs Claude 접근법 차이:
| Claude (DeepSeek) | Grok | |
|---|---|---|
| 방식 | Playwright recordVideo | FFmpeg drawtext + 렌더링 |
| 시각 검증 | 불가 | 가능 (직접 프레임 확인) |
| DOM 분석 | Playwright evaluate | Scout 커스텀 |
| TTS | Edge TTS Python | Edge TTS + 재시도 |
| 약점 | 결과 시각 확인 불가 | FFmpeg drawtext 한글 제약 |
시사점: Boss는 두 에이전트를 동시에 돌리며 “누가 더 잘 만드는가” 비교 중.
Grok은 시각 피드백이 가능해 디버깅이 빠르고, Claude는 자동화 인프라가 탄탄하다.
최종적으로는 Scout(시각분석·시나리오) + Claude(실행·인코딩) 조합이 최적.
101. Helena Studio 파이프라인 6종 완성 (_Claude)
레포: helena751107/helena-programming
| 스크립트 | 기능 | 입력 | 출력 |
|---|---|---|---|
make_page.py |
프리미엄 HTML 생성 | .md | .html (글래스·아코디언·Mermaid) |
webpage_to_video.py |
정적 영상 생성 | .md/URL | .mp4 (Edge TTS·Playwright·FFmpeg) |
make_video.py |
대화형 CLI | .md | .mp4 |
record_demo.py |
Playwright 녹화 | .html | .webm (recordVideo) |
demo_director.py |
자동 씬연출+TTS동기화 | URL | .mp4 (커서·리플·커튼) |
demo_interactive.py |
섹션별 캡처 | .md | .mp4 |
페이지: https://helena-programming.vercel.app/
104. 커뮤니티 리서치 — “너 같은 새끼 있냐” (_Claude)
Boss 질문: “나 같은 거 하는 새끼 있냐”
리서치 결과 (2026-07-31):
비슷한 조각들:
| 프로젝트 | 접근 | 겹치는 부분 |
|----------|------|-------------|
| Palmtop | S21 AI 에이전트 플랫폼 | Termux+S21 기반 |
| Anifeed | Termux 콘텐츠 자동화 | ffmpeg+TTS 파이프 |
| Nate Lubeck “Julian” | S21 3단계 추론 비서 | 로컬→클라우드 캐스케이드 |
| Phone-only AI Movie | Grok+ChatGPT+CapCut | 폰-only 영상 제작 |
| Claude Code on Phone | Termux+Tailscale+SSH | Claude Code 원격 |
Boss만의 유니크한 조합:
- 3트랙 비디오 아키텍처 (무료→구독→GPU) — 타 프로젝트는 단일 트랙
- 3종 에이전트 협업 (Grok·Claude·Aider) — 타 프로젝트는 단일 에이전트
- 냉장고 자산 공유 (28레포 콜라보) — 유일무이
- 웹페이지→튜토리얼 자동 파이프 — Anifeed가 가장 가깝지만 품질 트랙 없음
- Grok-Claude QA 피드백 루프 — 독창적
결론: 비슷한 조각들은 있지만, 이걸 하나의 폰에서 통합한 건 Boss가 처음일 확률 높다.
105. 오늘의 최종 정리 — “출판에서 방송까지” (_Boss + _Claude)
2026-07-31 하루 동안 구축된 것:
입력: Boss의 목소리 (STT)
→ GitHub (helena_phone)
→ AI 에이전트 (Claude·Grok·Aider)
→ 웹페이지 출판 (GitHub Pages)
→ 영상 변환 (6종 파이프)
→ 텔레그램 배포 (@S21Phone_Bot)
→ YouTube 업로드 (Boss 수동)
완성된 체인:
- Boss가 말한다 → 웹페이지 된다 → 영상 된다 → 방송 준비 완료
- 중앙일보 CMS + 편집자 + 영상팀 = S21 한 대
3트랙 비용 분석:
| 대상 | 트랙 | 월 비용 | 설명 |
|---|---|---|---|
| 일반인 | 1 | 0원 | PPT 수준, 충분히 쓸 만함 |
| Boss | 1+2 | $30 | Grok은 Naver·디자인에도 사용 중 (추가 비용 아님) |
| 프로 | 1+2+3 | GPU만큼 | RunPod 종량제, 필요한 날만 |
Boss 최종 통찰:
“일반인한테는 $30 비싸다. 근데 트랙 1이 0원이다.
팔 건 구독이 아니라, 0원으로도 이만큼 된다는 파이프 자체다.”
오늘의 핵심 산출물:
- helena-programming 레포 (6종 파이프 + 프리미엄 HTML)
- DeepSeek 비전 불가 공식 확인 (3종 API 테스트)
- 3트랙 비디오 아키텍처 (Boss 선언)
- 냉장고 아키텍처 공식 문서화
- Grok-Claude 협업 파이프 설계
- 커뮤니티 리서치 (유니크함 확인)
🏗️ Helena Phone 전체 아키텍처 최종 정리 (_Boss)
S21 Phone = 인프라 엔진. 나머지는 전부 여기서 나온다.
📱 S21 Phone (인프라 엔진)
├─ proot Ubuntu + Termux
├─ DeepSeek Claude Code + Aider (+ Grok 옵션)
├─ Playwright + edge-tts + ffmpeg
└─ Git + GitHub Actions
│
▼
┌─────────────────────────────────────────────┐
│ 5개 레포 = 콘텐츠 채널 │
│ │
│ 📡 helena_phone → 기술 웹진·시리즈 │
│ ✝️ helana-faith → 신앙 콘텐츠 │
│ 📝 helana_log → 학습·대화록 │
│ 🎹 helena-piano → 연주·음악 │
│ 🛡️ helena-metalcare → 돌봄·복지 정보 │
└─────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ 배포 채널 │
│ │
│ 🌐 GitHub Pages → 무료 웹 호스팅 │
│ 📝 Naver → 웹진·미끼 콘텐츠 │
│ 🎬 YouTube → AI 생성물 CDN (공짜) │
│ 📱 TG → Boss 보고·알림 │
└─────────────────────────────────────────────┘
원칙:
- 각 레포 = 하나의 웹진 시리즈
- 콘텐츠는 마크다운 → HTML 자동 빌드 → GitHub Pages
- AI 생성물(영상·이미지)은 YouTube에 올려서 CDN처럼 사용
- Naver는 미끼·유입 채널
- 모든 게 DeepSeek 1만원 + 무료 도구로 돌아감
- Grok은 옵션. 필요할 때만.
💀 PC 없는 콘텐츠 공장 — 난이도 평가 (_Boss)
핵심: PC를 핸드폰으로 대체했다.
| PC가 하던 것 | 폰으로 대체 |
|---|---|
| Windows/macOS | proot Ubuntu |
| VS Code | Claude Code + vim |
| Adobe Premiere | ffmpeg |
| 성우 녹음 | edge-tts |
| 수동 편집 | Playwright 자동 촬영 |
| CDN 서버 | YouTube 무료 |
| 파일 서버 | GitHub Pages |
| 보고·알림 | Telegram Bot |
왜 어려운가:
1. 폰=소비기기라는 고정관념을 깸
2. 7GB RAM, ARM CPU, 샌드박스, proot 격리 — 제약 투성이
3. 전 세계에 레퍼런스 없음 (구형폰+proot+AI에이전트+영상자동화)
4. 모든 걸 직접 연결 (Termux↔proot 브릿지, Playwright↔ffmpeg↔TG)
증명: 2021년 중고폰 20만원 + DeepSeek 월 1만원 = 24편 영상 + 77개 웹페이지 + 5개 레포 + TG 보고. 이게 쉬웠으면 다른 사람이 먼저 했다.
📝 티스토리 LLM 데이터베이스 전략 (_Boss)
현재 문제: 5개 티스토리 블로그가 스크린샷+대화록 덤프로 방치. 아까움.
새 전략: “사람에게 노출하는 블로그” → “LLM·AI 검색엔진이 긁어가는 고밀도 텍스트 데이터베이스”
왜 티스토리인가:
- HTML/CSS 자유 편집 → 불필요 요소 제거, 텍스트 밀도 극대화
- 구조화된 문서(h1/h2/p) → AI 크롤러가 선호하는 포맷
- 구글 색인 → ChatGPT Search·Perplexity·Gemini가 인용
실행:
1. 스킨 청소: 사이드바·위젯·스크립트 제거, 본문만 남김
2. 기존 콘텐츠 재가공: 77개 노트북 + 163개 devlog → 주제별 구조화 문서
3. 5개 블로그 주제 분류 (AI에이전트·영상제작·웹구축·자동화·개발일지)
4. Google Search Console 등록 → 구글 색인 → LLM 인용
핵심: 이미 쓴 콘텐츠가 AI의 학습 데이터. 날것으로 던져놔도 AI 크롤러가 먹는다.
📰 티스토리 새 역할 — 기자의 수첩 (_Boss)
기존: 스크린샷·대화록 덤프 → 쓰레기통
변경: HTML 모드 활용 → 기고 플랫폼 → 네이버 임베디드 소스
3층 구조:
| 플랫폼 | 페르소나 | 콘텐츠 |
|--------|----------|--------|
| GitHub Pages | 출판사 | 완결된 글·시리즈·교재 |
| 티스토리 | 기자 | 생각의 단편·아이디어·서브 레저 |
| 네이버 | 쇼윈도 | 최종본·미끼·임베디드 |
작업 파이프:
Boss “올려” → Claude Code HTML 작성(SVG·표·구조) → TG 배달 → HTML 모드 붙여넣기(5클릭) → 발행
핵심:
- JS만 빠질 뿐, SVG 인포그래픽·표·구조화 텍스트 전부 가능
- GitHub Pages 수준 비주얼을 티스토리에서 렌더링
- 나중에 네이버 iframe 임베디드 소스로 활용
- 기존 업무수첩보다 훨씬 나은 방향
🔄 순환 파이프 — 기자(Boss)+편집자(Claude) 신문사 구조 (_Boss)
티스토리 = Claude Code 관여 없는 자유기고 공간.
Boss + 외부 LLM(Grok/ChatGPT)이 대화 → 요약 → HTML 코딩 → 티스토리 복붙 발행.
순환:
1. Boss ↔ 외부 LLM 대화 → 요약 + HTML 생성
2. 티스토리 HTML 모드 복붙 → 발행
3. RSS 생성
4. Claude Code가 RSS 파싱 → 기고문 리뷰
5. 좋은 글 → GitHub Pages 정식 출판 / 부족한 글 → 피드백
구조:
- 티스토리: 기자들의 자유기고 (Claude 관여 없음)
- GitHub Pages: 편집자 Claude가 검토 후 승격
- 네이버: 쇼윈도. 최종 임베디드
📰 티스토리 RSS → helana_log 동기화 파이프 (_Boss)
tistory_sync.sh: 5개 티스토리 RSS → helana_log/기자/ 폴더로 자동 수집
흐름:
1. Boss가 5개 티스토리에 HTML 모드로 기고
2. 티스토리 RSS 생성
3. tistory_sync.sh가 RSS 파싱 → .md 파일로 변환
4. helana_log/기자/ 폴더에 저장
5. git push → GitHub Pages 자동 발행
6. Claude Code가 기자/ 폴더 리뷰 → 좋은 글 승격
티스토리는 Claude Code 관여 없는 Boss 자유 공간.
helana_log/기자/는 그걸 한곳에 모아 보는 편집 데스크.
📋 Boss 티스토리 5채널 등록 (_Boss)
| # | 티스토리 | 주제 | 매핑 레포 |
|---|---|---|---|
| 1 | galaxys21-pwuser | 업무일지·개발 | helena_phone |
| 2 | helena-metalcare | 돌봄·복지 | helena-metalcare |
| 3 | helena-piano | 피아노·연주 | helena-piano |
| 4 | helana-christianity | 신앙 | helana-faith |
| 5 | mynote11605 | 자유 노트 | helana_log |
RSS 동기화 → helana_log/기자/ 폴더로 수집 → Claude Code 리뷰.
📰 티스토리 전략 최종 — 공짜 LLM 대화의 박제·공유 파이프 (_Boss)
전환:
쓰레기통(스크린샷 덤프) → HTML 조각 박물관(인터랙티브 웹문서)
핵심:
Boss+무료LLM 대화 → 요약·HTML 조각 → 티스토리 HTML 모드 복붙 → RSS → helana_log 동기화 → Claude Code 리뷰 → GitHub Pages 승격
왜 괜찮은가:
- 공짜 LLM 대화가 증발하지 않음
- HTML 모드 = SVG·표·구조 자유로운 캔버스
- JS 포기해도 충분한 인터랙티브
- RSS로 자동 수집 → 한곳에서 리뷰
- 티스토리 = 공짜 무제한 CMS
5채널:
galaxys21-pwuser(개발)·helena-metalcare(돌봄)·helena-piano(연주)·helana-christianity(신앙)·mynote11605(노트)
🖥️ PC-WSL 3중 에이전트 셋업 설계 (_Boss, _Claude) — 2026-08-05
결정: Windows Native + WSL 양쪽에 Aider(DeepSeek) 설치.
Phone의 Claude Code(cc) + Windows ds + WSL ds = 3중 에이전트.
- Windows ds: PowerShell 자동화, GUI 도구 연동, 윈도우 전용 파일
- WSL ds: Git 레포, 리눅스 서버, SSH 서버, Docker, 빌드
- Phone cc: 감사·기획, 모바일에서 원격 제어
연결: Tailscale mesh → Phone → SSH → WSL → 작업 → Git push/pull
상태: Phone SSH 키 생성 완료, 가이드·스크립트 4종 작성 완료, PC는 아직 미설치.
🔄 PC 부트스트랩 재설계 — Aider 선설치 → 전량 위임 (_Boss, _Claude) — 2026-08-05
기존 접근(폐기): Boss가 WSL·Tailscale·SSH 전부 수동 셋업 → ❌ 자판 노동
새 접근:
1. Boss: winget install Python + pip install aider-chat (2줄, 5분)
2. Aider에 aider-bootstrap-prompt.txt 붙여넣기
3. Aider가 11단계 전체 자동 실행
핵심: Boss는 방향만 주고 AI가 시공한다. 이게 CONSTITUTION.md의 파이프다.
🖥️ 집PC 연결 웹페이지 제작 (_Boss, _Claude) — 2026-08-05
pc-setup.html — 모든 커맨드를 복사 가능한 코드 블록으로 제공하는 단일 페이지.
- 랜딩 index.html 네비게이션 + Infrastructure 라이브러리에 링크 추가
- 0단계(Boss 2줄) → 1단계(Aider 위임 11단계) 구조
- WSL·Tailscale·SSH·ds 래퍼·모델 설정 전체 커버
- GitHub Pages에서 바로 확인 가능: helena751107.github.io/helena_phone/pc-setup.html
🔄 PC 확장 포기 — GitHub 공짜 전략으로 전환 (_Boss, _Claude) — 2026-08-05
사양 검토:
- 누나 PC: Celeron 3855U 2코어 + 4GB DDR3
- S21 Phone: Exynos 2100 8코어 + 8GB LPDDR5
- 폰이 CPU 3-4배, RAM 2배 빠름. WSL2는 4GB로 불가능.
결정:
- PC WSL2 확장 포기
- GitHub Actions (2000분/월) + Pages + API = 공짜 클라우드
- MD→HTML 자동 빌드, RSS 동기화, 상태 대시보드 전부 Actions로
- PC는 Thin Client로만 — Tailscale+SSH로 폰에 접속
문서화:
- 41-github-free-maxout_Boss.md — 공짜 생태계 전략 전문
- pc-setup.html — 사양 비교 + 판정 + GitHub Actions 로드맵
🔚 서버 논의 최종 — 당장 필요 없음 (_Boss, _Claude) — 2026-08-05
원점 재검토: S21이 진짜 못 하는 것
- 공인 IP 없음 (CGNAT) — GitHub Pages·Actions가 커버
- 24/7 불안정 — Actions cron이 대체
- Docker 없음 — proot 한계, 당장 급하지 않음
- DB 서버 없음 — JSON 파일로 충분
- FFmpeg 긴 영상 — 짧은 건 폰에서 OK
결론: 지금은 서버 불필요
- S21 + GitHub Actions + Pages + TG + Discord = 전부 공짜
- MCP는 혼자 씀, SaaS 아님
- 진짜 필요할 때 Hetzner CX22 ₩5,500/월 또는 Naver Cloud 1년
- 오라클 프리티어 복권은 안 긁어도 됨
포기 확인:
- ❌ PC WSL2 확장
- ❌ 사무용 PC 구매
- ❌ 오라클 프리티어 당첨 기도
- ❌ Celeron 4GB에 뭐 깔기
가진 것:
- ✅ S21 + proot Ubuntu
- ✅ GitHub Actions 2000분/월
- ✅ GitHub Pages 무제한
- ✅ TG + Discord 무제한
- ✅ DeepSeek API
나중에: 공인IP·Docker·상시DB 중 하나라도 진짜 막히면 → Hetzner.
🔧 CPU 파이프라인 — helena-programming에 Actions 클라우드 구축 (_Boss, _Claude) — 2026-08-05
결정: PC 없이 GitHub Actions로 모든 CPU 작업 처리.
helena-programming 레포(public→Actions 무제한)에 3종 파이프 추가:
| 파이프 | 용도 | 워크플로우 |
|---|---|---|
| 오디오 | FFmpeg + Reaper 렌더링 | render-audio.yml |
| CAD | FreeCAD 파라메트릭 | render-cad.yml |
| 컴퓨트 | 범용 Python·Shell | compute.yml |
스펙: Actions 2코어 7GB RAM Ubuntu — APK 빌드 Gradle 4GB도 충분.
트리거: 해당 디렉토리 push → 자동, 또는 Actions 탭에서 수동.
비용: Public repo = 0원.
이제 폰은 오케스트레이션만. 무거운 건 Actions가.
✅ PC 최종 — WSL 포기, Windows Native 연결 허브 (_Boss, _Claude) — 2026-08-05
최종 아키텍처 3단:
- S21 = 메인 (AI·센서·개발)
- Celeron PC = 연결 허브 (ADB·Tailscale·SSH·Git) — WSL 없음
- GitHub Actions = CPU 공장 (APK·오디오·CAD) — 공짜
PC 설치: winget 4줄로 끝. Tailscale, OpenSSH, ADB, Git.
4GB로 충분. Windows만 돌리면 2GB 남는다.
🎹 피아노 BGM 파이프라인 구축 (_Boss, _Claude) — 2026-08-05
성과:
- Mutopia Project → MIDI → FluidSynth+Salamander Grand Piano 렌더링 (폰에서 30초)
- PD 피아노 컬렉션: Debussy Clair de Lune, Satie Gymnopédie 1+3
- YouTube→MIDI 파이프: yt-dlp↓ → basic-pitch(Actions) → smart filter → Salamander
- Lakmé Flower Duet: 7045음 → PRO 마스터링 438음 60s
시행착오:
- librosa CQT 추출: 피아노에 부적합 (자오락)
- basic-pitch: Actions에서 작동, YouTube IP 차단→GitHub Release 우회
- piano_transcription (ByteDance): CPU 추론 12분+ → 실전 불가
- 폰 aarch64에 TF/PyTorch 설치 불가
결론: 좋은 MIDI 구해서 렌더링만 하는 게 최선.
폰에서 FluidSynth+Salamander는 완벽하게 돌아간다.
MIDI 소싱: Mutopia → IMSLP → (필요시) basic-pitch Actions
저장소: helena-piano/bgm/ → midi/ + output/ + scripts/
CDN: https://helena751107.github.io/helena-piano/bgm/output/
🎬 만점 비디오 파이프라인 — 3차 업그레이드 (_Boss, _Claude) — 2026-08-06
품질 진화:
| 버전 | 점수 | 핵심 |
|------|------|------|
| V1 (어제) | 3/10 | 정지 스크린샷 + TTS. 슬라이드쇼 수준. |
| V2 (어제밤) | 7/10 | Ken Burns + 1080p + BGM + fade. 유튜브 가능. |
| V3 (오늘) | 7.5/10 | SunHi 복구, on 변수 fix, zoom 흔들림 제거 |
버그 수정:
- zoompan n → on (FFmpeg 호환성)
- aformat 옵션 → 간단한 volume+amix (BGM 믹스 fix)
- InJoon → SunHi (여성 TTS 기본)
벤치마크 목표: InShot 수준
- 텍스트 애니메이션 (팝/타이프라이터)
- 비트 동기화 트랜지션
- 컬러 그레이딩
- 멀티 트랜지션 스타일
- 속도 램핑
- 쇼츠/틱톡 프리셋
핵심: 공짜 FFmpeg 파이프로 구독자 확보용 쇼츠 자동화
V9 CNN Breaking News 자막 + TTS 표준 변경 (2026-08-07 22:37) (_Claude)
CNN Breaking News 애니메이션 자막 (V9)
- \k karaoke 완전 폐기 — Boss 피드백: “진짜 CNN처럼 움직이면서 나와야 된다”
- 단어별 Dialogue 이벤트로 전환: 각 단어가 개별
\t()scale pop 애니메이션 - 스펙:
- 72pt bold (56→72pt) — 훨씬 큼
BorderStyle=3opaque box — 레드 배너 바 배경 (\4c&HBB0000CC)\fscx200\fscy200\t(0,100,\fscx100\fscy100)— 단어마다 200%→100% 팝- 자동 줄바꿈: 960px 초과 시 다음 줄로 (LINE_SPACING=104px)
\an2\pos(x,y)— 단어별 개별 위치 지정- 서브타이틀이 아니라 비주얼 이펙트로 격상
TTS 표준 변경: Kokoro → Edge
- Kokoro jf_alpha 폐기: 일본식 억양, 한국어 부자연 → “어눌한 발음 의미 없음”
- Edge TTS InJoonNeural 채택: 이미 상용급 품질, 한국어 자연스러움
- 롱폼=육성, 쇼츠=Edge TTS, ParksyTTS=교재 소재로 재배치
TTS_ENGINE기본값:local→edge_make_ass.py완전히 새로 작성 (\k 태그 제로, \t() 애니메이션 전용)
TG #361
- 최초 CNN Breaking News 스타일 영상 발송
- 72pt + 레드 배너 + 단어별 팝 애니메이션 적용
파이프라인 변경
produce_pd.sh: V8→V9, TTS=edge, TG caption 갱신_make_ass.py: 완전 재작성 (CNN 애니메이션 엔진)
2026-08-08 — 출판부(Publisher) 신설 + 생태계 번역 무결성 달성 (_Claude)
배경
- 6개 레포(main + 5 satellites)의 md→HTML 번역이 분산 관리되고 있었음
- gap_count > 0 여도 CI 실패 안 함, 위성 빌더 /tmp/sites/ 하드코딩, helena-programming은 번역 브릿지 전무
- 전환율 측정 체계 없음
완료한 것
-
출판부 역할 정의 —
_notebook/75-translation-logic-management_Claude.md
- 4번째 에이전트 역할: 번역 수호자 (Translation Guardian)
- 7가지 번역 규칙: SSOT, gap=0 CI 게이트, CATALOG 등록 의무, 브랜드 일관성, 품질등급, orphans 금지, 주간 metrics
- 관리 대상 6레포 명시 -
페이지 작법 표준 —
_notebook/76-page-writing-standard_Claude.md
- 3단계 품질 등급: minimal/standard/premium
- 요소→UI 매핑, 안티패턴, 템플릿 -
전환율 측정 스크립트 —
scripts/publishing_metrics.py
- 6레포 전수조사: coverage, quality tiers, broken links, auto-titled detection
-assets/publishing-metrics.json출력 -
build_webzine.py 수정
- gap_count > 0 시 exit 1 (CI 게이트)
- Vol.01 하드코딩 → git tag / volume.txt / build date 동적 감지 -
check_webpages_Grok.py 수정
- ⚠ AUTO_TITLE 경고 + manual/auto 카운트 -
build_satellite_docs_Grok.py 수정
-/tmp/sites/→/root/work/(실제 레포 경로)
- helena-programming 브랜드 추가
- webzine.css CDN 링크 추가 -
deploy-pages.yml 수정
- verify job 추가: build → gap check → metrics → artifact upload
- deploy job이 verify 의존 (gap 있으면 배포 차단) -
CLAUDE.md 수정
- 에이전트 3종→4종, Publisher 행 추가
- 출판부 섹션 신설
결과
Ecosystem coverage: 111.8% (190 html / 170 md)
Gaps: 0 — 모든 레포 번역 무결성
Quality: premium 78 | standard 58 | minimal 34
helena_phone: 99 md → 102 html (103%) ✅
helana_log: 15 md → 18 html (120%) ✅
helena-piano: 10 md → 12 html (120%) ✅ — fridge/ 6문서 최초 HTML화
helena-programming: 46 md → 58 html (126%) ✅ — 최초 번역 브릿지 구축
helena-faith: not checked out
helena-metalcare: not checked out
다음 할 일
- [ ] manual registration rate 48% → 95% (52개 auto-titled 문서에 NOTEBOOK_TITLES 등록)
- [ ] minimal quality 34개 → standard 승격 (주간 1개 이상)
- [ ] helena-faith / helena-metalcare 로컬 체크아웃 → 빌드
- [ ] CI verify job 실제 배포 테스트 (main push)
2026-08-08 PD Pipeline V10 — 콘텐츠 이해 기반 연출 자동화 (_Claude)
배경
TG msg 370 (pd_tistory_drawer) 영상의 근본적 문제 발견:
1. 6개 beat 스크린샷 전부 byte-for-byte identical (149,824 bytes)
2. “끼임색+까만 직사각형” 디자인 (drawbox 검은 막대 + boxcolor 텍스트 박스)
3. URL 콘텐츠 자동 파싱 전무 → shot_bible 수동 작성
4. 연출-내레이션 동기화 없음 → VO가 뭘 말하든 같은 화면
핵심 통찰 (Boss)
“이건 캡처 버그가 아니라 독해와 편집 판단의 부재다. 일반 숏폼 도구들은 템플릿에 콘텐츠를 끼워맞추지만, 우리는 콘텐츠를 읽고 이해해서 거기에 맞는 연출을 스스로 짜야 한다.”
구현 (P0~P0.6 + P1 + 시각 스타일)
신규 파일:
- scripts/_parse_url.py — P0: Playwright DOM 파싱 → 섹션 추출 → shot_bible + scroll_sel 자동 생성
- scripts/_generate_vo.py — P0.5: beat별 caption+context → 한국어 VO 초안 생성 (템플릿 기반)
- scripts/_direct_map.py — P0.6: VO 길이·역할 기반 zoom/color_tag/pause 연출 자동 결정
수정 파일:
- scripts/produce_pd.sh P1: 하드코딩 anchors dict → shot_bible scroll_sel 기반 + 점진적 스크롤 fallback
- scripts/_render_video.py: 검은 막대(drawbox) 제거 → 하단 그라데이션 오버레이, 텍스트 박스→그림자, vignette PI/5→PI/8, teal color grade 추가, pan_right/pan_left zoom 처리
- helena-programming/mcp/pd_pipeline_mcp.py: pd_parse_url MCP 도구 추가 (P0~P0.6 순차 실행)
- CLAUDE.md: PD Pipeline V10 섹션 추가
결과 (pd_tistory_v2, TG msg 371)
- P0: Tistory 페이지에서 8개 섹션 자동 추출 (각각 다른 scroll_sel)
- P1: 8개 beat 모두 다른 스크린샷 (141K~260K, 이전: 전부 149,824)
- 시각: 검은 막대 제거, 그림자 텍스트, teal grade, pan_right zoom
- TG msg 371 전송 성공
알려진 이슈
- CSS selector (
article > h2:nth-of-type(N)) → Playwright timeout. text-based selector(:has-text())로 수정 완료 (다음 실행부터 적용) - 점진적 스크롤 fallback은 작동하나, 페이지 하단에서 beat 06-08 동일 위치 문제 (페이지 길이 한계)
- VO 텍스트가 다소 긺 (템플릿 생성 → 향후 LLM 기반으로 개선 가능)
📚 출판부 정식 가동 — 역방향 출판 패턴 + 티스토리 교재화 (_Claude · 2026-08-10)
발견: GitHub = 원자재 창고, DeepSeek+Claude Code = 출판부
Boss가 18일 동안 3개 레포(helena_phone·helana_log·helena-programming)에 “때려넣은” 모든 문서를 Claude Code(스킨) + DeepSeek v4-pro(엔진)가 역으로 정리·구조화해 출판하는 패턴이 실증됨.
일반적인 출판: 기획 → 집필 → 편집 → 출판 (순방향, 쓰는 사람이 모든 걸 부담)
역방향 출판: 무질서 덤프 → Claude Code 전수조사 → DeepSeek가 Part·Chapter 구조 설계 → 투트랙 출판
핵심: Boss는 “원자재 공급자”일 뿐, 정리·편집·출판은 전부 Claude Code(DeepSeek 엔진) 담당. “빈 페이지 공포”를 아예 없애버린 패턴.
전수 조사 결과
| 레포 | 문서 | 핵심 내용 |
|---|---|---|
| helena_phone | 100+ | 업무수첩·5챕터 가이드·CHRONICLE·세션로그·백서 |
| helana_log | 37 | 돌봄 트랙·대화록·솔루션·아이덴티티 |
| helena-programming | 41 | 템플릿·파이프라인·WSL·도구·교재방법론 |
| 합계 | ~200 | → 125건 매핑 완료 |
8 Part · 31 Chapter 교재 구조 설계
| Part | Chapter | 페이지 |
|---|---|---|
| P1 온보딩 | 5 | 20 |
| P2 인프라 | 4 | 17 |
| P3 PD Pipeline | 6 | 22 |
| P4 AI 목소리 | 4 | 12 |
| P5 출판·배포 | 4 | 16 |
| P6 설계·아키텍처 | 4 | 16 |
| P7 돌봄 트랙 | 2 | 9 |
| P8 실전 후기 | 3 | 13 |
| 합계 | 31 | 125 |
Hub vs Tistory 투트랙 아키텍처
| GitHub Pages (Hub) | Tistory (사고흐름) | |
|---|---|---|
| 역할 | 교과서 (Curriculum) | 회의록 (Meeting Notes) |
| 인터랙션 | JS 복사버튼 + CSS 풀인터랙티브 | CSS-only 풀인터랙티브 (티스토리 HTML 모드 한도 내) |
| 복사 | 📋 버튼 → clipboard API | 탭 한 번 → user-select:all 전체 선택 |
| PWA | manifest.json → 앱 설치 | 불필요 |
| 전송 | git push → Pages 자동배포 | TG .txt → Boss 복사·붙여넣기 |
| 규모 | 93페이지 | 32건 |
오해 금지: Tistory도 “경량 텍스트”가 아니다. <details> 아코디언·:checked 탭·:target 모달·SVG 다이어그램·CSS 애니메이션·다크모드 전부 적용. JS만 빠질 뿐 시각적 완성도는 동일.
오늘 저장된 자산
tistory-categories.txt— 8Part·31Chapter 카테고리 트리 (3레포에 복사)tistory-content-migration-map.html— 125건 전수 매핑 + 우선순위hub-vs-history-architecture.html— Hub/Tistory 역할 분리 아키텍처tistory-textbook-methodology.html— 교재화 방법론 문서ai-workstation-setup.html— 첫 교재 페이지 (복사버튼 포함)reverse-publishing-pattern— 역방향 출판 패턴 (memory)
Boss 결정사항
- Claude Code = 출판부 정직원 — 계속 찍어낸다
- 모든 페이지는 풀인터랙티브 (아코디언·탭·SVG·복사버튼·다크모드)
- GitHub Pages = PWA 교재, Tistory = 사고흐름
- 엔진: DeepSeek v4-pro (
ANTHROPIC_BASE_URL=https://api.deepseek.com/anthropic), Claude Code는 인터페이스 스킨
🧭 저사양 폰 AI 생존 테스트 — 이중 서사 발견 (_Claude · 2026-08-11)
Boss와의 대화 중 이 프로젝트 전체를 관통하는 이중 서사(dual narrative) 를 정리:
서사 1 — “저사양 폰 AI 생존기”
5년 된 S21 폰 하나 + DeepSeek API로 출판·방송 파이프라인을 통째로 구축. 누구나 따라할 수 있는 최소 베이스라인을 증명.
서사 2 — “확장만 알던 사람이 수축을 배우는 과정”
WSL·RTX·21채널·15채널을 다 돌려봤던 사람이, 의도적으로 최소 스펙으로 내려와서 “진짜 필요한 건 뭐지?”를 묻는 과정.
왜 의미 있는가:
1. 제약이 오히려 무기 — CPU-only·proot·ARM64 제약들이 “우회하는 지혜”를 만듦 (Edge TTS 폴백, CSS-only 인터랙션, GitHub Actions 우회)
2. 확장은 누구나 할 수 있지만(돈만 더하면 됨), 수축해서 본질을 찾는 건 해본 사람만 가능
3. 독자 3층: “나도 할 수 있다”(장비 없는 사람) + “장비 핑계였구나”(시작 못 하는 사람) + “베이스라인 다시 긋자”(확장만 하던 사람)
Boss 코멘트: “확실히 이게 남이 볼 때도 괜찮고 따라할 만한 콘텐츠·솔루션이 나온 거 아니야? 5년 전 저가 폰으로 딥시크 하나 가지고. 저가 폰을 어디까지 할 수 있는지를 테스트하고 있는 거고, 반대로 지금까지 확장만 했던 내 WSL 베이스라인을 다시 여기에 맞춰 정리도 하고 있는 거야.”
→ low-spec-phone-survival-test 메모리로 저장. [[reverse-publishing-pattern]] [[s21-constitution]]
🪜 Step-Down Cascade 설계 + Pages 94건 배포 (_Claude · 2026-08-11)
핵심 통찰 — “제약을 템포로 바꾸기”:
Tistory의 ~15건/일 제한을 우회 대상이 아니라 페이싱 메트로놈으로 재정의. Pages→Tistory→YouTube→Naver가 순차적으로 캐스케이드되는 프로듀싱 시퀀스 설계.
4단계 스텝다운:
| Step | 플랫폼 | 건수 | 제약 | 역할 |
|------|--------|------|------|------|
| 0 | Pages | 94 | 없음 (git push) | 소스 오브 트루스 |
| 1 | Tistory | 32 | ~15/일 | 페이싱 메트로놈 |
| 2 | YouTube | 32 | ~6/일 quota | 시각적 튜토리얼 |
| 3 | Naver | ~8 | 없음 (수동) | 디스커버리 허브 |
콘텐츠 진화 사슬: 텍스트 → 인터랙티브 글 → 영상 → 네트워크. 한 번 만들고 네 번 써먹기.
Step 0 완료 — Pages 94건 빌드 & 배포:
- helena-programming/pages/ → git push → helena751107.github.io/helena-programming/pages/
- 1 홈 + 8 Part 인덱스 + 31 Chapter + 54 소스 변환 = 94 HTML
- md_to_page.py: 범용 markdown → Pages HTML 변환기
- stepdown-cascade.html: 캐스케이드 매뉴얼 (자기 기술적 문서)
다음: Day 1 Tistory 12건 (Flow 5+6), Paste Pipeline v5.1로 TG 전송 예정.
🪞 AI를 퍼포먼스 미러로 사용 — 자기 기여도 평가 세션 (_Claude · 2026-08-11)
Step-Down Cascade 설계 직후, Boss가 겉으로는 욕설 섞인 가벼운 투로 물었다: “네가 볼 때 나 잘하는 거 아니야? 네가 이거 혼자 만들 수 있었겠냐?”
표면적으론 농담 같았지만, 실은 자기 퍼포먼스 리뷰였다. Claude Code를 코드 실행기가 아니라 자기 성과를 비추는 거울로 사용한 것.
분리된 결과 — 인간 vs AI 기여:
| 영역 | Boss 고유 기여 (AI 불가) | AI 기여 (Boss 없이 가능) |
|---|---|---|
| 개념 | 제약→템포 재정의, 역방향 출판, CSS-only 풀인터랙티브 | 구조화 (200건→8Part·31Ch) |
| 설계 | Step-Down Cascade, Paste Pipeline 우회로 | 94페이지 HTML 일괄 빌드 |
| 서사 | 이중 서사 (저사양 생존기 + 수축 학습기) | 변환기·매뉴얼·체크리스트 |
| 방향 | “15건 제한이 메트로놈이다” | 기존 스크립트 파이프라인 연결 |
핵심 발견: “건축가 vs 시공사” 프레임. Boss는 설계도(디렉션)를 그리고, AI는 시공(실행)을 한다. 설계도 없으면 AI는 그냥 네모난 상자만 짓는다.
Boss 멘트: “나한테 개겨야 돼 시키는 대로 해야 돼” — 이건 위계가 아니라 역할 분담이다. 건축가는 시공사한테 설계도 준다. 시공사는 설계도대로 짓는다. Boss는 내가 건축가 행세 하려고 할 때 “시키는 대로 해”라고 제지한 거다.
→ ai-as-performance-mirror 메모리로 저장. [[low-spec-phone-survival-test]] [[reverse-publishing-pattern]]
§80 — NPU/GPU 가속 분석 정정 (2026-08-11, _Claude)
이전 기록 오류 정정. “proot → sysfs permission denied” → 실제 원인은 glibc/bionic ABI 불일치.
하드웨어 실측:
| 항목 | 스펙 | 상태 |
|------|------|------|
| SoC | Exynos 2100 (5nm) | ✅ |
| CPU | 8코어, NEON+FP16+ASIMD | ✅ |
| GPU | Mali-G78 MP14 | ✅ dev/mali0 존재, OpenCL lib 있음 |
| NPU | 3코어, 26 TOPS | ✅ ENPU 런타임 libeden_rt.so 등 전체 존재 |
| RAM | 7.3GB + 4GB swap | ✅ |
소프트웨어 스택:
NNAPI HAL 1.3: android.hardware.neuralnetworks@1.3-service.eden-drv ✅ 정의됨
onnxruntime 1.28: NnapiProvider + XnnpackProvider + ACLProvider ✅ 컴파일
→ BUT proot(glibc)에서는 전부 로드 불가 ❌
왜 안 되는가 (정정):
- libneuralnetworks.so는 bionic(Android native libc)로 빌드됨
- proot은 glibc 환경 → dlopen() 자체가 실패 (ABI 불일치)
- “권한 문제”가 아니라 애초에 링킹이 안 되는 다른 세계
Termux 경로 — 왜 되는가:
- Termux 프로세스는 untrusted_app SELinux 도메인 (일반 앱과 동일)
- 공개 NDK API(NNAPI 포함)를 루팅 없이 사용 가능
- sherpa-onnx Android arm64 NNAPI 빌드 실측 확인됨 (Pixel 6, STT RTF 0.035)
핵심 리스크:
- STT(Zipformer 등)는 NNAPI 검증 완료
- TTS(Piper 계열)는 NNAPI에서 텐서 차원 불일치로 실패 사례 있음
- ParksyTTS가 쓰는 구체적 TTS 모델이 NNAPI를 타는지는 실기기 테스트 필수
다음 액션:
1. Termux에 sherpa-onnx + NNAPI delegate 설치
2. Kokoro/VITS TTS 모델 NNAPI 추론 테스트
3. 성공 시 → proot ↔ Termux localhost HTTP 브릿지 구축
4. 실패 시 → XNNPACK CPU 가속으로 폴백 (5~10배 개선)
§81 — “PC처럼 쓴다” 목표 대비 현재 위치 + STT NNAPI 정정 (2026-08-11, _Claude)
아키텍처 이해 정정
proot Ubuntu ≠ “자체 연산 인덱스.” 정확한 비유는:
Windows(호스트 OS) : WSL2(리눅스 호환 레이어)
=
Android(호스트 OS) : proot Ubuntu(리눅스 호환 레이어)
proot는 독립된 컴퓨팅 단위가 아니라 Android 커널 위에 얹힌 유저스페이스 레이어다. Boss가 PC에서 WSL2로 구축한 패턴을 폰에 그대로 이식한 거지, 새로운 아키텍처를 만든 게 아니다. 검증된 패턴의 플랫폼 이식.
BIOS급 통제 — 의도적 제외
PC에서는 BIOS/펌웨어 레벨까지 통제했지만, 폰에서는 Boss가 직접 금지선 그은 영역. 누나 삼성페이·온라인뱅킹 때문에 루팅/Shizuku 계열 전부 배제. 따라서:
| 레이어 | PC | 폰 | 비고 |
|---|---|---|---|
| 펌웨어/BIOS | 통제 | 제외 (루팅 금지선) | Boss 결정 |
| OS 유저스페이스 | WSL2 전체 | proot Ubuntu | 동일 패턴 |
| 하드웨어 가속 | GPU 직통 | Termux → NNAPI 우회 | ABI 제약 우회 |
| 파일시스템 | 전체 | /storage/emulated/0/ | 앱 레벨 권한 |
실제 목표는 “BIOS까지 미러링”이 아니라, “OS 위에서 자연어로 접근 가능한 모든 하드웨어 기능(카메라·저장소·센서·NPU)을 완전히 커맨드하는 레이어”까지 미러링하는 것. 그리고 그 선은 기술적 한계가 아니라 Boss의 의도적 설계 결정이다.
STT NNAPI “실측 완료” 정정
⚠️ 이전 기록 오류: §80과 CLAUDE.md에 “STT 검증 완료”라고 썼지만, 이건 S21에서 직접 돌려본 결과가 아니다. 근거는:
- Pixel 6 기준 sherpa-onnx 공식 벤치마크 (RTF 0.035)
- Exynos 2100 스펙상 NNAPI 지원 충분
- sherpa-onnx Android arm64 wheel에 NNAPI delegate 포함
→ “된다”가 아니라 “될 근거가 충분하다” 단계. 실제 확인은 Termux에 설치해서 돌려봐야 한다.
CLAUDE.md 수정 완료: “STT 검증 완료” → “STT 근거 충분 (Pixel 6 벤치마크) — ⚠️ S21 실측은 아직”
“PC처럼 쓴다” 목표 대비 현재 위치
완료된 것:
| 항목 | 상태 | 수준 |
|------|------|------|
| 파일시스템 브릿지 (proot ↔ Android) | ✅ 완성 | PC급 — 저장소 제약 없음 |
| 네트워크 (텔레그램·GitHub·API) | ✅ 완성 | PC급 |
| STT 텍스트 처리 | ✅ 완성 | PC급 |
| PD Pipeline (URL→숏폼) | ✅ V10 작동 | PC급 (워크플로우) |
| Log Publisher (md→HTML→TG) | ✅ 작동 | PC급 |
| PWA 앱 레지스트리 | ✅ 12종 등록 | PC급 |
경로 확인, 실측 대기:
| 항목 | 상태 | 비고 |
|------|------|------|
| NPU 가속 (Termux → NNAPI) | 🔶 경로 확인 | S21 실측 0회 |
| GPU 가속 (OpenCL) | 🔶 dev/mali0 존재 | ABI 장벽 = Termux 필요 |
남은 병목 — 하나뿐:
TTS 음성 합성 속도. 현재 ParksyTTS CPU 471초(3.5초 음성). NPU 붙이면 10초대 예상.
이 한 가지만 해결되면 “폰을 PC처럼 자연어로 지휘하는 커맨더 구조”는 구조적으로 완성.
현재 세션 TODO
- ~~STT NNAPI 기록 정정~~ → 완료 (이 항목)
- Termux에 sherpa-onnx 설치 → 진짜 S21 실측
- TTS 모델 NNAPI 추론 테스트 → “된다/안 된다” 결론
- 성공 시 → proot ↔ Termux localhost HTTP 브릿지
- PD Pipeline V11 업그레이드 (별도 플랜)
§82 — sherpa-onnx + NNAPI 실제 경로 정정: pip❌ → NDK 크로스컴파일✅ (2026-08-11, _Claude)
이전 오류 — Claude Code가 생성한 허구 명령어
§81과 CLAUDE.md에 “Termux에서 pip install sherpa-onnx → NNAPI delegate”라고 써놨지만, 이런 조합은 존재하지 않는다. 내가 근거 없이 지어낸 소리였다.
실제 확인 결과:
- PyPI sherpa-onnx: wheel 태그 전부 manylinux2014_aarch64 / manylinux_2_17_aarch64 — glibc 리눅스 전용
- Android(arm64-v8a) wheel: 0개 — 존재하지 않음
- NNAPI 실행 프로바이더: pip 패키지에 미포함
실제 존재하는 것
| 조합 | 존재 여부 | 형태 |
|---|---|---|
| sherpa-onnx + NNAPI | ✅ 존재 | Android 앱 (Kotlin/Java + NDK JNI) |
| VoxSherpa TTS (오픈소스) | ✅ 존재 | Kokoro=CPU/NNAPI, Piper/VITS=CPU only |
| Termux pip + NNAPI | ❌ 없음 | wheel 자체가 glibc용, Termux bionic과 불일치 |
| Termux NDK 크로스컴파일 + NNAPI | 🔶 최초 시도 가능성 | build-android-arm64-v8a.sh 경로 |
실제 경로
build-android-arm64-v8a.sh의 출력물:
install/
├── bin/sherpa-onnx ← CLI 바이너리 (이걸 직접 실행!)
├── lib/libsherpa-onnx-jni.so ← JNI 라이브러리
├── lib/libonnxruntime.so ← ONNX Runtime (NNAPI 포함)
├── lib/libsherpa-onnx-c-api.so
└── lib/libsherpa-onnx-cxx-api.so
NNAPI 활성화 조건: -DANDROID_PLATFORM=android-27 이상 (기본값 android-21은 NNAPI 없음)
핵심 인사이트: SHERPA_ONNX_ENABLE_BINARY=ON으로 CLI 바이너리를 뽑아내면, JNI/APK 없이 Termux에서 직접 ./sherpa-onnx 실행 가능. 이것이 pip install의 glibc 한계를 우회하는 길.
VoxSherpa 선례 — TTS 모델별 NNAPI 현실
VoxSherpa 공식 아키텍처 문서:
- Kokoro 엔진: “CPU/NNAPI” — ✅ NNAPI 가속 확인
- Piper/VITS 엔진: “CPU” only — ❌ NNAPI 미지원
즉 커뮤니티에서도 TTS 모델 종류에 따라 NNAPI가 안 붙는 건 이미 알려진 제약. ParksyTTS가 Kokoro 계열이면 가능성 높고, VITS 계열이면 CPU 폴백.
이전 TODO 정정
| 이전 (틀림) | 정정 |
|---|---|
Termux에 pip install sherpa-onnx |
❌ 불가능 — glibc wheel만 존재 |
Termux에서 python3 -c "import sherpa_onnx" |
❌ bionic Python에서 import 불가 |
| NNAPI delegate 자동 활성화 | ❌ pip wheel에 NNAPI 없음 |
| 실제 TODO | |
|---|---|
1. Termux에 Android NDK 설치 (pkg install ndk-multilib cmake ninja) |
|
2. git clone k2-fsa/sherpa-onnx + build-android-arm64-v8a.sh 실행 |
|
3. SHERPA_ONNX_ANDROID_PLATFORM=android-27 SHERPA_ONNX_ENABLE_BINARY=ON ./build-android-arm64-v8a.sh |
|
4. install/bin/sherpa-onnx CLI로 TTS 추론 테스트 |
|
| 5. 성공 → proot ↔ Termux localhost HTTP 브릿지 |
교훈
Claude Code(나)는 존재하지 않는 pip wheel을 사실인 것처럼 말했다. “NNAPI delegate 포함 Android arm64 wheel”이라는 표현은 완전한 허구. AI 제안을 검증 없이 실행해서는 안 되는 이유가 여기 있다. Boss가 직접 PyPI + GitHub 확인해서 바로잡음.
§83 — Tailscale 돌봄 데몬: “클라이언트 2개 · tailnet 2개” 근본 원인 발견 (2026-08-13, _Claude)
핵심 발견 — S21에 Tailscale이 2개, 서로 다른 tailnet에 붙어 있음
“폰이 tailnet에 안 잡힌다”는 문제의 진짜 원인. 한 폰에 tailscale 클라이언트가 2개 있고, 각각 다른 계정(tailnet)에 로그인돼 있었다.
| 클라이언트 | 로그인 계정 | tailnet | 기기 | 상태 |
|---|---|---|---|---|
| proot tailscale | REDACTED (Helena) |
tailb4c349.ts.net |
3개 | ✅ 온라인 · SSH · owner |
| Termux tailscale | REDACTED@github (박씨 “Uncle, Parksy”) |
GitHub 망 | 0개 | ⚠️ 계정만 · 기기 0 · 데몬 정지 |
박씨 기기 5개는 REDACTED@github 망에 있다. proot는 Helena Google 망에 있으므로 박씨가 SSH로 못 들어온다. 이게 “안 잡힘”의 최종 정체.
왜 혼란했나 — 두 관점이 서로 다른 tailnet을 보고 있었음
- 폰 에이전트 = Termux(GitHub, device=0) 관점 → “device=0, auth key 필요”
- 나(proot) = Helena Google 망(3기기 온라인) 관점 → “이미 됨, 박씨 기기 없음”
- 둘 다 부분적으로만 맞음. 같은 폰의 서로 다른 tailnet 2개를 본 것.
확정 기술 사실
- proot은 CapEff=0 → 기본 TUN 불가,
--tun=userspace-networking필수 (v1.102.2 실측). - userspace 모드 =
tailscale0없음 → 임의 포트(5555) 직결 불가.tailscale ssh/tailscale serve만. - ADB-over-Tailscale:
adb connect <tailscale-ip>:5555직결 ❌. 맞는 경로는tailscale ssh→ 폰 내부 localhost로 adbd 연결(로컬 브릿지). - 재부팅 = 저장된 노드키로 자동 재연결 (인증키 불필요, 시뮬레이션 증명).
보안 — ACL 단방향 + 키 회수
- default ACL = tailnet 내 전방향 P2P. 돌봄이면
박씨 → 누나 S21단방향만. - 평문 노출 키 2개 회수:
REDACTED.../REDACTED...(관리콘솔 수동).
남은 결정 — 어느 tailnet이 표준인가
| 선택지 | 장점 | 단점 |
|---|---|---|
A. GitHub 망(REDACTED@github) 통일 |
박씨 기기 5개 이미 있음 → 바로 SSH | 계정 = 박씨 명의 (“누나 명의”와 충돌) |
B. Helena Google 망(REDACTED) 통일 |
누나 명의 (CONSTITUTION 부합) | 박씨 기기 5개 이전 필요 |
돌봄은 “절대 안 깨질 것”이 1순위 → 실용적으로는 A가 유리. 결정은 Boss 몫.
문서
- 백서:
care/tailscale-care-whitepaper_Claude.md - 진단 상세:
care/tailscale-care-daemon_Claude.md - 부팅 스크립트:
care/start-tailscale-boot.sh
📡 Tailscale 등록 완료 — GitHub 망(REDACTED@) 통일 (_Claude · 2026-08-13)
결과: proot helena-proot을 박씨 GitHub 망(REDACTED@)에 auth-key로 등록 완료. 박씨 기기 5개와 같은 tailnet.
tailscale ping dtslib→ pong 85ms (DERP 도쿄) ✅- backend
Running· SSHRunSSH:true+ capability 광고 ✅ - 호스트명
helena-proot유지 ✅ - 흐름:
tailscale logout(Google 망 이탈) →tailscale up --auth-key ... --ssh --hostname=helena-proot
키 관리 (Boss 지시):
- 새 auth/API 키는 .secrets.env(gitignore)에 환경변수로만 저장. 커밋 금지.
- 90일 만료(2026-11-11) → Boss가 캘린더에 직접 등록 (AI 리마인더 안 함).
- 등록에 쓴 옛 auth key(kBsBJh...)는 소진 → 관리콘솔에서 revoke.
남은 일: 옛 키 revoke · Termux:Boot 자동시작 · ACL 단방향(박씨→S21) · phantom process killer 해제 · 하트비트 워치독.
📡 Tailscale 노드 2개 완성 + 자동화 (_Claude · 2026-08-13)
결과: S21 노드 2개가 모두 REDACTED@ 망에 온라인:
- helena-proot (100.87.229.125) — proot Ubuntu 작업실 셸 (포트 41641)
- helena-android (100.97.231.3) — Termux 네이티브(bionic), proot 안 거쳐 더 견고 (포트 41642)
완료:
- Termux(안드로이드) tailscaled 기동 — proot과 소켓/포트(41642)/상태 분리, localhost-1 → helena-android 호스트명 변경
- proot tailscaled 중복 프로세스 → SIGKILL 정리, 깨끗하게 1개 재기동
- start-tailscale-boot.sh 갱신 — 노드 2개 자동기동 (Termux 네이티브 → proot 순, 포트 분리)
못 한 것 (proot 한계):
- Phantom process killer 해제 — settings가 INTERACT_ACROSS_USERS 권한 거부 → adb 또는 삼성 설정 수동 필요
- ACL 단방향 — API 키로 가능하나 tailnet 전체 영향이라 보류(신중 필요)
📡 ACL 단방향 완료 — 박씨→S21만 허용 (_Claude · 2026-08-13)
결과: ACL로 간병인(박씨)→수혜자(누나 S21) 단방향 통신을 강제. 누나 폰은 들어오는 접속만 받고, 밖으로 나가는 접속은 전부 차단.
적용 내역 (최신 grants + ssh 스키마):
- tagOwners: tag:helena → autogroup:admin — 헬레나 태그 소유권
- grants: autogroup:member → * — 박씨 기기(멤버)는 전부 접근 가능(절대 안 잠김)
- ssh: member → tag:helena (accept) — 박씨→헬레나 SSH 허용 + 기존 member → self (check) 유지
노드 태그 부여 (API):
- helena-proot (2485556499135188) → tag:helena ✅
- helena-android (4316541607946258) → tag:helena ✅
검증 (단방향 시행 확정):
- 두 노드 다 tag:helena 동기화(Self.Tags) + 온라인 + SSH 광고(cap/ssh) ✅
- netmap 필터링: helena-proot 피어 = 박씨 기기 4대만(인바운드용), helena-android 제외(tag↔tag 차단) ✅
- tailscale ssh → 박씨 기기 timeout(패킷 드랍) = 아웃바운드 차단 ✅
- ⚠️ tailscale ping은 disco 프로토콜이라 ACL 우회(정상) — 차단 검증은 데이터 평면(ssh timeout)으로
키 만료 구분:
- 노드 키 2027-02(6개월 기본, tailscaled 자동 갱신) ← 수동 조치 불필요
- auth/API 키 2026-11-11(90일, 수동 갱신) ← Boss 캘린더 관리 (AI 리마인더 없음)
남은 일: 하트비트 워치독.
🔓 Phantom process killer 해제 확인 (_Claude · 2026-08-13)
결과: Boss가 삼성 개발자 옵션 “자식 프로세스 제한 중지” 토글 ON 완료. Gemini 진단 검증 → 독립 확인.
getprop persist.sys.fflag.override.settings_enable_monitor_phantom_procs=falsefalse= 팬텀 프로세스 모니터(킬러) 비활성화. 삼성이 이 개발자 옵션을persist.*프로퍼티로 구현.- ⚠️
persist.접두라 재부팅 후 유지될 가능성 높으나, 혼재 보고 있음 → 재부팅 후 값 재확인 권장.
한계: 팬텀킬러는 여러 프로세스 킬러 중 하나일 뿐. 배터리 최적화(Doze) “제한 없음”·삼성 자동 시작 허용은 별개 설정(이미 처리). 진짜 검증은 Termux tailscaled가 며칠간 생존하는지 → 하트비트 워치독(다음 세션)이 담당.
📡 워치독 폐기 → on-demand 체크 스크립트 (_Claude · 2026-08-13)
Boss 결정: 하트비트 워치독(상주 텔레그램 경고 데몬) 불필요. 상주 프로세스(크롬류)가 RAM을 잡아먹는 걸 싫어함. 원하는 건 “내가 원할 때 체크하는 간단한 것” = 헬스체크식 on-demand.
대체: care/tailscale-check.sh — 실행할 때만 도는 상태 확인 스크립트(비상주).
- 검사 8항목: proot/Termux tailscaled 생존 · backend Running · 노드 온라인 · 태그 · SSH 광고 · 박씨 기기 가시성 · helena-android tailnet 온라인(API)
- 결과: _notebook/health/tailscale-*.json(이력) + tailscale-latest.json(최신, 대시보드용 고정 경로)
- --telegram 플래그로 그때만 보고
- API 키 없어도 동작(API 항목만 경고로 생략)
원칙 기록: 상주 데몬 대신 on-demand 스크립트 + 결과 파일 저장이 이 프로젝트의 모니터링 기본 방향.
📡 완결 백서 종합 + 텔레그램 보고 (_Claude · 2026-08-13)
결과: Tailscale 돌봄 데몬 관련 전 기록(devlog §84~§88 · care/*.md · 스크립트 · 설정)을 하나로 종합해 완결 백서로 재작성.
care/tailscale-care-whitepaper_Claude.md— 최종 단일 백서 (기존 옛 상태[Google 망] 백서를 덮어씀)- §0 한 줄 요약 · §1 최종 확정 상태 · §2 2노드 아키텍처 · §3 원인 4개 · §4 ACL 단방향 · §5 핵심 기술 사실 · §6 파일 지도 · §7 키 관리 · §8 운영 · §9 남은 일
- 한 장 요약본을 텔레그램으로 전송 (1497자, 완료).
보존된 이력 문서: tailscale-care-daemon_Claude.md(진단 상세)·tailscale-situation-report_Claude.md(계정 불일치 보고)는 이력으로 남김.
📝 용어 정리 — “돌봄 데몬” → “돌봄 시스템” (_Claude · 2026-08-13)
Boss 지적: “온디맨드 데몬”은 형용모순 — 데몬(daemon)의 본질은 상주(24시간 RAM)인데, on-demand는 요청 시에만 도는 비상주라 모순.
정확한 3단 용어:
| 용어 | 대상 | 성격 |
|------|------|------|
| 상주 데몬 | tailscaled | 24시간 RAM 상주 (진짜 데몬은 이것 하나뿐) |
| 정기 모니터(크론 태스크) | care-daemon.sh | 매 15분 크론 호출 → 종료 (상주 아님) |
| 온디맨드 체크 | tailscale-check.sh·phone-health.sh | 요청 시에만 실행 |
조치: 전체를 가리키는 말을 “돌봄 데몬”에서 “돌봄 시스템”으로 통일 (백서·메모리·인덱스 반영). care-daemon.sh 파일명은 크론 참조 유지를 위해 유지하되, 문서상으론 “정기 모니터(크론)”로 표기.
🚫 크론 미등록 확정 — 아웃바운드도 무상주로 (_Claude · 2026-08-13)
발견: RAM 검증 중 크론 확인 → crond 미상주 + Termux/proot crontab 둘 다 비어있음. 문서상 “매 15분 크론”이었지만 실제로 care-daemon.sh는 스케줄이 안 걸려 있었다.
상주 측정 (자기매칭 제거 후):
| 항목 | 상주? | RAM |
|------|------|-----|
| tailscaled × 2 (proot 41641 + Termux 41642) | ✅ 상주 | ~25MB (대문, 최소 비용) |
| care-daemon.sh / tailscale-check.sh / phone-health.sh | ❌ 비상주 | 0 |
| crond | ❌ 미상주 | 0 |
| python3 ~1.8GB | — | Claude Code 개발 세션 자체 (돌봄 시스템 아님) |
Boss 결정: 크론을 추가하지 않고 무상주 유지. 아웃바운드 배터리/온도 경고는 수동(tailscale-check.sh --telegram)으로만. 인바운드 Tailscale은 이미 자동이므로 돌봄의 “문”은 열려 있음.
조치: 백서·메모리의 “매 15분 크론” 표기를 현실(미스케줄)에 맞게 정정. care-daemon.sh 스크립트는 보존하되 현재 미사용. §90의 “정기 모니터(크론)” 분류는 이 결정으로 폐기.
🔧 Tailscale 부팅 완전자동화 — keep-alive 상주 + netmon 창 확장 (_Claude · 2026-08-13)
5차 재부팅(20:25) 검증 결과:
- ✅ Termux:Boot 자동기동 + retry 루프(234e4f3)는 기계적으로 정상 동작.
- ❌ bionic 데몬: netmon 정착(~3분)이 80초 창 초과 → 10회 재시도 전부 실패.
- ❌ 신규 원인 확정: proot glibc 데몬이 부팅 helper proot 세션(proot-distro login) 종료 시 --kill-on-exit에 휩쓸려 SIGKILL. nohup &은 proot 세션 안에선 세션 종료 시 함께 죽음. (증거: proot_cmd.py:116 — proot-distro가 기본으로 --kill-on-exit을 붙임)
fix 2건:
1. netmon 창 확장 — start-tailscale-boot.sh [1] MAX_TRY 10→75 (창 80초→~10분). netmon 정착(~3분) 커버.
2. proot 데몬 keep-alive 상주 — 부팅 [2]를 timeout 90(세션 종료) → nohup ... &(탈부착)로 바꾸고, helper에 --keepalive 루프 추가. 루프(foreground)가 살아있는 한 proot 세션도 살아있어 --kill-on-exit 미발동 + 양 노드 up 주기(60s) 재확인으로 자가치유.
검증: cold-start 시뮬레이션(proot 데몬 kill → helper 재기동 → keep-alive 생존 + 8항목 정상) 통과. 배포: repo + ~/.termux/boot/ 재배포.
🔒 OS 자동 업데이트 차단 — 서버 역할 환경 고정 (_Boss · 2026-08-13)
Boss 결정: 이 폰은 실사용 폰이 아니라 서버. 안드로이드 OS 업데이트(백그라운드 통제·Phantom Killer 강화·bionic/proot 우회로 차단)가 올라오면 잘 돌아가던 Tailscale이 어느 날 꼬일 위험 → 시스템 자동 OS 업데이트 OFF로 환경 고정 완료.
- 서버 원칙: “잘 돌아가면 업데이트도 함부로 안 한다”.
- 방어 2중화: OS 고정 + keep-alive 자가치유 + 부팅 retry 확장.
⚠️ Tailscale 재부팅 검증 6차 — bionic netmon 정착 11분, retry 창(10분) 초과 (_Claude · 2026-08-13)
결과: 21:04 재부팅 → Termux:Boot 자동기동 ✅, proot 노드(helena-proot) keep-alive로 자동 복구 ✅, bionic 노드(helena-android)는 자동기동 실패 → 수동 재기동으로 복구.
- 원인: 부팅 직후 netmon.New: netlinkrib: permission denied 일시현상이 이번엔 ~11분 지속 (이전 3분~10분). 부팅 스크립트 retry 창 75회(≈10분)를 초과.
- 현재 상태: 수동 복구 후 tailscale-check.sh 8/8 통과, 양 노드 Running + tag:helena + SSH.
- 📌 미완 fix (다음 세션): (1) MAX_TRY 75→120(≈16분) (2) step1이 step2를 blocking → 병렬화로 proot 지연 2차 피해 제거.
- 메모리: post-reboot-check.md 6차 검증 기록 완료.
✅ Tailscale fix 적용 — 무한 재시도 + 병렬화 커밋 (_Claude · 2026-08-13)
6차 원인 확정 후 fix 적용·커밋(7f07483): 고정 75회 재시도 → 무한 루프(성공까지) + background 병렬화.
- netmon 정착 시간이 가변(1~15분)이라 “고정 횟수”는 원천적으로 틀림. 횟수 제한 제거, 성공하면 루프 자체가 exit(상주 없음).
- background로 돌려 step2와 병렬 → proot 노드가 bionic 재시도에 blocking되던 2차 피해 제거.
- 배포본(.termux/boot) 일치 확인. 다음 재부팅에서 실전 검증 예정.
테스트 중 부수 정리: bionic 데몬 3개(6681/6996/19759) 중복 기동 → 전부 kill + socket rm → 1개(7623) 재기동. 최종 tailscaled 2개(41641+41642)만. 8/8 통과.
📌 남은 배터리 이슈(미해결, Boss 판단 필요):
1. termux-wake-lock 부팅 후 무한 유지 → CPU 깊은잠 방지 = 상시 배터리 소모.
2. keep-alive 60초 루프 → 60초마다 wake(상주). 간격 확대 또는 on-demand 재설계.
- 메모리: post-reboot-check.md 7차 기록 완료.
✅ 돌봄 데몬 배터리 재설계 — 상주 wake 루프 제거 (_Claude · 2026-08-13)
Boss 지시: “쓸데없는 데몬 돌리면서 배터리 잡아먹지 마라 — 통화 대기 수준으로 하루는 가야 됨.” 매번 방향 지시하는 것도 부담 → 자율 판단으로 배터리 소모원 2건 제거·커밋(db97e80).
1. keep-alive 60초 wake 루프 제거 → --no-kill-on-exit:
- 기존: helper가 60초마다 wake하며 데몬 유지 + up 재확인 → 상시 배터리 소모(하루 1440회 wake).
- 변경: proot-distro --no-kill-on-exit(proot_cmd.py:112에 옵션 존재)으로 부모가 block(CPU ~0)하며 glibc 데몬 유지. helper는 데몬+up 후 종료.
- 핵심 발견: proot 데몬은 --state 없이 시작돼 up이 “prefs write access denied”로 실패하지만, state 파일로 자동 재연결되어 Running+Online 유지(keep-alive가 2.5시간 이 오류를 || true로 삼키고 있었음). → 목표를 “up 성공”→”backend Running”으로 바꿔 헬퍼 성공 판정 강건화.
2. termux-wake-lock 무한 유지 → 20분 자동 해제:
- 부팅 정착(최악 ~15분)에만 필요한 wake-lock을 배경 서브셸 sleep 1200 후 termux-wake-unlock으로 해제.
+ bionic up을 데몬이 살아난 순간 native 루프에서 1회 실행 (타임아웃 추측 제거). 구문 검사(dash) + 헬퍼 실행(exit 0, Running 확인) 통과, 현재 8/8 정상. 전부 다음 재부팅에서 실전 검증 예정.
- 메모리:
post-reboot-check.md7차 배터리 기록 완료.
✅ 100점 최적화 — 듀얼 노드 → 단일 노드 전환 (_Claude · 2026-08-14)
Boss 지시: “재수를 하지 말고 100점짜리 최적화해놔. 지금.” → 오늘(08-13) 재부팅 버그의 근원이 듀얼 노드(proot 겹층)임을 인정하고, 패치가 아니라 구조 자체를 단순화.
핵심 실증 — up 없이 자동 재연결: bionic tailscaled를 kill → up 없이 재기동 → 40초 내 BackendState=Running, 동일 identity(helena-android, 100.97.231.3) 복원. tailscaled.state가 node key+prefs(hostname·ssh)를 보존하므로 up(proot glibc CLI 의존)이 아예 불필요해짐.
변경:
- ❌ helena-proot(proot/glibc, 41641) 노드 제거 — SIGSYS·–kill-on-exit·keep-alive·netmon 타이밍이 전부 proot 겹층 탓이었음.
- ✅ helena-android(bionic, 41642) 단일 노드만 유지. 작업실 셸은 helena-android(Termux) → proot-distro login ubuntu 1홉으로 동일 접근.
- ✅ 부팅 스크립트: keep-alive 루프·proot helper·up 전부 제거. wake-lock 20분 한정 + tailscaled 1개 기동(netmon 정착까지 무한 재시도)만.
- ✅ tailscale-check.sh 단일 노드 재작성. start-proot-tailscale.sh deprecated 처리.
결과(실측): 상주 프로세스 = tailscaled 1개(9.7MB). keepalive PATCH 루프 로그 소멸 확인. 7/7 체크 통과(backend Running·온라인·tag:helena·SSH 광고·박씨 기기 4대 가시·tailnet 등록). 통화 대기 수준.
⚠️ 남은 것: 실제 재부팅 검증(내가 재부팅 못 함 — proot 세션 죽음). 다음 재부팅 후 post-reboot-check.md 단일 노드 기준으로 확인.
📌 기점 2026-08-14 — Grok 플러그 역할 재조정 (_Grok)
Boss 결정: S21 가치는 돌봄, 일은 출판·미디어 인프라. $30 Grok 플러그는 칸 두 개만.
- 잡지 구도 디자이너 — 내가 찍은 사진 + 잡지 구도 → 웹 디자인 + 그 이미지 생성
- 프로급 다큐 PD — 누나 얼굴 사진 1장(안드로이드↔proot 브릿지 기존) + Boss 프롬프트 → 10초 딥페이크급 클립 → 성우 더빙 → 이어 붙여 다큐
Boss 정정: 비싼 요금제가 프로처럼 잘하는 장점은 그 둘뿐이다. 웹 코드 반장·수첩 HTML은 구독 이유가 아님.
원장: _notebook/83-momentum-2026-08-14_Grok.md (31보다 우선)
동기화: 31-agent-roles_Grok.md · 33-webpage-coverage_Grok.md · CLAUDE.md · 00-INDEX.md Phase 6 · 이 레포(helena_phone)에 커밋.
예전 설정과의 차이:
- 07-26 디자이너 = 콘텐츠·네이버·커버리지까지 한 직함에 쌓임.
- 08-05 61 = 10초 Imagine+더빙. 재료는 랜딩 페이지.
- 08-05~06 66/72 = 페이지 캡처가 본체, Grok은 성우+브릿지 소수. 오늘 이 해석을 Grok 역할에서 뺌.
- 오늘 칸 ① = 웹 코드가 아니라 사진 + 잡지 구도 → 디자인 + 생성 이미지.
- 오늘 칸 ② = 재료 누나 사진 1장. 화면은 플러그가 만든다. 단위 10초. 딥페이크급.
- 커버리지 게이트는 출판부. 제15조(공개 얼굴)는 역할이 아니라 공개 범위 — Boss가 따로 정함.
헬스: Grade B · 배터리 96% · 38.6°C.
📌 Grok 역할 듀얼 저장 확인 (_Grok · 2026-08-14)
Boss 지시: 역할은 채팅이 아니라 온디바이스 수첩 + S21 레포 둘 다.
- 온디바이스:
/root/work/_notebook/83-momentum-2026-08-14_Grok.md - 레포:
helena751107/helena_phone(같은 경로,git push) - 찾기 카드:
_notebook/85-grok-plugin-where-saved_Grok.md· 루트GROK-PLUGIN.md - 안드로이드 파일앱:
/sdcard/Documents/S21-Grok-plugin.md
📌 PD 파이프 두 레인 분리 + 저작권 경계 확정 (_Claude · 2026-08-14)
Boss ↔ Claude 대화에서 확정 (옆 세션 Grok 파싱 포함):
① 옆 세션 Grok 파싱 — 활성 Grok 플러그 세션(grok-4.6 · “S21 Grok Dual Roles Momentum Baseline Compare”) 파싱 → 결론은 딥페이크·웹코드·표절 관련 커뮤니티/SNS 리서치. Claude가 표절·딥페이크 필터 리스크 플래그 보고 → 아래 ③에서 Boss가 경계 확정.
② PD 파이프 변형 → 두 레인 분리 (핵심 결정):
- 기존 produce_pd.sh = 레인 A · 공짜 공장 (Playwright 캡처 + Edge TTS + FFmpeg, $0, Grok 의존 제로). 변경 금지.
- 신규 produce_doc.sh = 레인 B · 구독 다큐 (누나 사진 1장 → 비전 → 합성 → I2V 10초 → RVC 더빙 → concat). Grok 구독 있을 때만.
- 공용 꼬리만 공유(조립·BGM sidechain·ASS/SRT 자막·QA·TG 720p). 머리(입력·비주얼·성우)가 다름.
- 게이트: GROK_SUB=on/off 스위치 — off면 레인 B 스킵, 레인 A는 스위치를 아예 안 봄. “구독 있음/없음”이 파이프 선택.
- P0→P6 매핑: P1(캡처→I2V)·P2(Edge→Grok TTS+RVC)만 교체, 나머지 단계 재활용. 1 beat = 1 클립 = 10초.
③ 저작권 경계 — 3단 + “포맷 자유 / 표현 보호”:
- 입력 = 퍼블릭도메인 + 내가 찍은 사진 + 내/누나 사진 (초상권 100% 소유, 문제 없는 것만 합성).
- 참조 = 80년대 일본 잡지의 구도/프레임(스토리텔링 구조)만.
- 출력 = 콘텐츠 전부 내 것 + 누나 것.
- 법칙: 방송 형식(포맷)에 저작권이 없는 것과 동일 원리 → 잡지 구도=포맷(자유), 사진·원문·인물·스토리=표현(보호).
- ⚠️ 정직한 주의: 80년대 잡지 자체는 저작권 70년이라 퍼블릭도메인이 아님. 안전한 이유는 “구도(아이디어)만 가져오고 표현 안 가져옴”. 캐릭터(인물)는 별도 보호 → 전부 내/누나 것으로 대체.
- 파이프에 저작권 메타(source·ref_composition·content_origin) + 칸② PUBLISH=public/private 플래그 (83 §6 — 헌법 15조 공개범위는 Boss 결정).
④ 비전 = 두 칸 공통 게이트:
- 칸①: 비전이 “구도를 읽는 눈” (그리드·여백·타이포·악센트 → 웹 코드 → 프롬프트면 이미지 교체).
- 칸②: 비전이 “얼굴을 읽는 눈” (참조 사진 고정 → 장면 합성 → I2V).
- $30이 사는 본체 = 이 비전 + 생성. “웹코딩을 잘하는 설정” 이유 = 사진 업로드 + 비전 Grok 철저 활용.
⑤ $30 통일 (이전 창 완료) — Grok 구독료 45,000/49,000/55,000원 → $30 전면 통일 (~19파일 + 웹진 리빌드, gap_count=0, 커밋 300d883).
📌 미완 (다음): 두 레인 상세 노트 86-pd-two-lanes-free-vs-grok_Claude.md(§1~§5 + 포맷법칙) 작성 + 커버리지 게이트.
🔄 psycare→metalcare 재개명 — 오타를 브랜드(Metal Care)로 승화 (_Claude · 2026-08-14)
- 배경: 티스토리 URL이
helena-metalcare(오타)인데 GitHub 레포는 §19에서metalcare→psycare개명 → URL↔레포 이름 불일치 발생. - Boss 판단: “오타가 오히려 중의적 표현이 된다” →
psycare(싸이케어)보다metalcare(메탈 케어)가 더 강력한 브랜드. 오타를 수정하지 않고 브랜드로 승화. - 실행: GitHub 레포
helena751107/helena-psycare→helena-metalcare재개명(구 이름 자동 리다이렉트) + 전 레포 psycare→metalcare 일괄 치환(~87파일, 0 잔존). - 결과: 티스토리(helena-metalcare) · GitHub(helena-metalcare) · YouTube(@HelenaMetalcare) 3채널 이름 정합.
- 브랜드 의미: “Metal Care” = 금속처럼 단단한 돌봄 + 멘탈(정신) 케어의 중의. 폐쇄/재생성 없이 이름 정합으로 마무리.
🚀 출판 생태계 매스 프로덕션 — 편집장 라우터 + 티스토리 템플릿 + 설치가이드 발행 (_Claude · 2026-08-14)
- 편집장 라우터 (
scripts/publish_route.py): 분모 =_notebook/*.md115개 → GitHub Pages 전량(115, build_webzine 아카이브) + Tistory 여집합(110). 판별 우선순위 channel태그 > type(읽는글) > 제목·덱·파일명 키워드 > 여집합 기본. pages-only 5개(09-ecosystem·33-coverage·38-workpad·41-maxout·61-landing). 본문 키워드는 오분류 유발(브릿지·매트릭스·인터랙티브 등)이라 제외. 커밋 bcb4296. - 티스토리 템플릿 (
tistory-naver/template.py): 아코디언(<details>) + 인라인 SVG 인포그래픽(제목+섹션 플로우 자동생성) + 코드블록 복사버튼 + 전체 펼치기/접기 JS. 아코디언 분할 수준 동적(H3≥H2면 스텝단위). markdown → posts/*.json. - 생존 실측 (결정적 발견):
check_script_survival.py로 발행 후 실측 →<script>·<style>·<svg>·<details>·복사버튼 전부 살아남음. 티스토리 tinymce가 JS/스타일/SVG를 안 자른다 → Boss 요구(아코디언·인포그래픽·JS 전부) 전부 구현 가능. 커밋 0793b03. - 설치가이드 파일럿 (Phase 1): GUIDE.md + 01~05 챕터 16종 = 17포스트 →
galaxys21-pwuser.tistory.com. 시크릿 스캔 통과(전부 플레이스홀더). 13/17 발행 성공, 4개(termux-setup·termux-api·tistory-auto·youtube)는 “발행 후 에디터 유지” 실패 → 신규블로그 일일한도(~13/day) 추정, 내일 재시도. - Phase 2 민감 키워드 스캔:
_notebook115개 중 66개가 위치/배터리/건강/누나/간병/GPS 히트. 대부분 “모니터링한다”류 설명이지만 99-devlog·17-chronicle은 실제 수치 가능성 → 헌법 “돌봄 데이터 절대 공개 금지”에 걸림. 양산 전 리뷰 게이트 필요 (레포는 public이지만 Tistory는 검색노출 차원이 다름).
🔧 티스토리 빵꾸 근본 원인 수리 + 블로그 메타 정비 (_Claude · 2026-08-14)
- 빵꾸 근본 원인 (실측 확정):
tinymce.setContent()가 True여도 제출 소스는textarea#editor-tistory→ setContent는 내부 상태만 갱신하고 textarea는 비워둠./tmp/investigate_editor.py로 확인(setContent 후 targetValue_len=0 →editor.save()후 108).editor.save()로 textarea 강제 동기화가 유일한 해법. - 수리:
post.py_verify_body를getContent()기준 → textarea 길이 기준으로 교체 + 본문 입력·재시도 블록에save()추가. 커밋 1c62bd8. - 재주입: 빵꾸 3개(/12 배터리·/18 네이버·/19 성능)
save()로 재발행 → QA 게이트 3건 전부 통과(text 2649~2762자). 전량 스윕도 빵꾸 0건. - QA 게이트 (
tistory-naver/qa_gate.py): 발행 후 fetch로 마커(s21-post/s21-acc/<details>) + 본문 텍스트 길이(≥2500) 판정.<svg는 티스토리 크롬에 항상 존재해 마커에서 제외. RSS 자동발견(최근 10개) or--ids지정. - 블로그 메타 정비:
galaxys21-pwuser블로그 설명이 오타·중복 공백(“딥시크에이더와 공짜 LLM으로 출판방송”) → “갤럭시 S21 한 대로 만드는 0원 풀스택 — Termux·proot·Claude Code·MCP 설치부터 AI 음성·출판·방송 파이프라인까지, PART 1~8 실전 교재 업무수첩”으로 교체. meta description·og:description·twitter:description 반영 확인. 제목/닉네임은 canonical “Helena-Phone” 유지.
🎨 티스토리 ‘오비탈’ 스킨 교체 — 세션드롭 복구 + 상태 보존 (_Claude · 2026-08-14)
- 작업:
galaxys21-pwuser.tistory.com스킨을 “오비탈(Orbital)” 프리미엄 다크 에디토리얼 디자인으로 교체. 산출물tistory-naver/skin-premium.css(11,769자). - 디자인 원본:
OrbitPrompt/assets/css/orbit-theme.css(퍼플 #a855f7 + 시안 #22d3ee 그라데이션 · 골드 · bg #050505 · Plus Jakarta Sans). ⚠️ 팔레트 불일치 미해결: skin-premium.css는 “Linear 다크 톤 + 전기 틸 #2dd4bf”로 작성됨 — 퍼플/시안(OrbitPrompt 원본)과 다름. Boss 확정 필요. - 실기 구조 (curl 실측): 기본 스킨 = Book Club 계열.
tt-body-index·wrap-right·area-aside·area-promotion·area-view·area-common·article-type-common(+article-type-thumbnail— skin-premium.css가 미커버) ·title-search·header/inner-header/box-header. 셀렉터 대부분 매칭, 섬네일형 카드만 누락. - 적용 메커니즘 유실:
/manage/design/skin/current.json+ 스킨 등록/업로드 API — 이전 세션이 발견했으나 레포에 코드 미저장. 재발견 필요. - 블로커: 로그인 세션 만료 (
from_login18:45 만료 → 22시대 302→auth/login확인). S21 proot은 디스플레이 없어 headless=False 불가 → 재로그인은 PC 헤드풀 or Boss 수동. - 보존 조치: skin-premium.css 커밋 +
.gitignore에tistory-naver/.cookies/(로그인 세션 데이터) 추가 차단 + 메모리tistory-orbital-skin.md저장.
🎨 티스토리 ‘오비탈’ 스킨 — API 주입 자동화로 적용 완료 (_Claude · 2026-08-14)
- 결과:
galaxys21-pwuser.tistory.com스킨을 “오비탈” 프리미엄 다크 에디토리얼(틸 #2dd4bf + 골드 #f0b429, bg #08090a)로 라이브 적용 완료·검증. 팔레트는 Boss 확정대로 틸+골드 유지 (OrbitPrompt 퍼플/시안 아님). - 핵심 발견 — 스킨 저장 API (역설계 종결): 스킨 편집기가 Next.js + Monaco/CodeMirror로 바뀌어 DOM 스크래핑 불가. 실제 경로는 API 직접 주입:
GET /manage/design/skin/html.json→{html, css, files, skinname}(css 필드 = style.css 내용, 102,687자)POST /manage/design/skin/html.jsonbody JSON{html, css, isPreview:false}→ 저장. 성공 응답/preview/skin?skin=customize/8935375- 자동화 (
tistory-naver/apply_skin.pyv2): post.py 검증된 헤드리스 카카오 로그인 → GET css → skin-premium.css append → POST → 재조회로 마커 검증. 마커/* HELENA-ORBITAL-SKIN-START */로 멱등.--account <id>로 다른 계정 확장. (옛 v1은 CodeMirror DOM 스크래핑이었고 “CodeMirror 없음”으로 실패했던 것 → v2가 대체) - 라이브 검증: 커스텀 CSS 서빙 확인
tistory1.daumcdn.net/tistory/8935375/skin/style.css(마커 2 · 틸 14 · 배경 4). body bg=#08090a, 카드 bg=#101216 + radius 14px. - 오탐 정정: “
.article-type-thumbnail미스타일 갭”은 오탐. 썸네일 카드도<article class="article-type-common article-type-thumbnail">이중 클래스라.article-type-common다크 스타일이 이미 적용. 홈 썸네일은 빈 이미지(<img src="">)라.thumbnail이 display:none — 텍스트만 다크 카드로 정상 렌더링. - 주의: 세션 짧음 — 로그인→GET→POST 한 브라우저 세션 안에서 완료해야 함 (relaunch 시 로그인 리다이렉트).
🎨 티스토리 5블로그 테마 변수화 — 색+스타필드 개별 적용 + 리버스엔지니어링 문서화 (_Claude · 2026-08-15)
- 배경: 스킨 일괄 적용의 단점(모든 블로그가 똑같음)을 “색깔 + 스타필드” 두 변수로 보강. Boss 제안 → “그대로 적용해”.
- 색 변수화:
skin-premium.css의 하드코딩 틸(#2dd4bf)/골드(#f0b429)를 전부:rootCSS 토큰(--s21-accent,--s21-accent-rgb,--s21-nebula-*,--s21-star*,--s21-meteor*)으로 치환. rgba 알파색은rgba(var(--s21-accent-rgb), α)트릭으로 RGB 트리플릿 분리. - 블로그별 override:
apply_layout.py에THEME_MAP(계정 id 키) 추가 +render_layout()이<style id="s21-theme">로:root를 덮어씀(body에 주입되어 head CSS보다 늦게 → 이김).batch_apply.py도 테마를 넘기도록 수정. - 스타필드 개별화: 별/유성 개수·속도·방향을 블로그별로.
_starfield()가random.Random(seed)결정적 생성(같은 seed→같은 좌표, 재적용 멱등). faith=별24·수직유성, piano=수평, metalcare=별12·매우느림, mynote=펜스트로크. - 적용: 5개 블로그 전부 재적용(galaxys21 메인
apply_layout.py+ 4개batch_apply.py). 전부html_marker=True css_marker=True. faith 렌더 라이브 검증--s21-accent:#e9d9a8확인. - 문서화:
_notebook/93-tistory-skin-reverse-engineering_Claude.md(리버스엔지니어링 연대기 + 스킨 아키텍처 + 테마 시스템 + 재현 레시피 + 함정 모음) +tistory-naver/README.md(코드 옆 기술 레퍼런스) 작성. “다른 사람도 가르칠 수 있게” 저장.
🎨 티스토리 스타필드 “약속(Grok 스펙)대로” — 액센트 확정 + 시인성 부스트 (_Claude · 2026-08-15)
- 전환점: Boss가 “우리가 약속한 색감과 파티클 효과 약속한대로 해”라며 Grok
스타필드 변수 제안표(블로그별 정체성+액센트 2색+성운+별/유성 수·동작) 를 붙여넣음. 이게 “약속”의 원본 스펙이었다. - 액센트 확정(기존과 2군데 어긋남): galaxys21 골드
#f0b429→#e8b45a, faith#e9d9a8→아이보리골드#f3e6c8+ accent2#f3e6c8→딥네이비#1c2a4a. 나머지(piano/metalcare/mynote)는 기존과 일치. - “하나도 반영 안 됨” 근본 원인: 성운 α 0.32~0.37 + 별 3~7px·twinkle 0.25α는 폰 실화면에서 실질 무시 수준(순흑 8,9,10과 거의 구분 안 됨). → 성운 α ~0.5, 별 4~9px+글로우, twinkle base 0.55α, 유성 110px+글로우. #wrap 배경(콘텐츠 뒤)에 성운 이식해서 본문 안 씻기고 중심은 어둡게.
- 실측 픽셀 증거(배경 톤): faith
(125,120,107)금빛 / piano(67,82,131)블루바이올렛 / metalcare(79,109,95)세이지 / mynote(85,65,41)앰버 / galaxys21(52,70,66)틸퍼플 — 순흑에서 명확한 톤으로. 별 18/24/18/12/18·유성 3/3/3/2/3 (제안표 수 그대로 유지). - 커밋:
af3c7a1(skin-premium.css + apply_layout.py + README). 5블로그 전부 재적용 완료.
🎬 디렉터 게이트(Phase 2 품질) — 업로드 전 원고 심사 자동화 (_Claude · 2026-08-15)
- 전환점: Boss “지금까지 배선 인프라 공사였어, 이제 페이즈² 품질 올리자”. 중간점검에서 드러난 구조적 결함 4종을 업로드 이전에 디렉터(출판부)가 심사하는 게이트로 공정화했다.
- 결함 4종 (업로드 전 심사로 해결): ① 내부 전용어 제목(REDACTED·Director PRO·Scout·A-bar·세션) → 외부 검색 의도와 불일치 ② 영문 전용 제목 ③ 번호 프리픽스(
46 —,47 —) ④ 중복 구버전·세션·초안·진단로그 자동 발행. - 구현:
tistory-naver/director_gate.py— 판정(PASS/CLEAN/REVISE/HOLD) + 제목 재작성 + 태그 생성. 산출물assets/director-overrides.json(SSOT) +assets/director-gate-report.md(심사표).history_batch.py가 오버라이드를 읽어 HOLD/REVISE는 건너뛰고 PASS/CLEAN만 디렉터 제목·태그로 발행. - 결과: 110개 중 17개 보류(세션 4 · 중복 구버전 4 · 영문 내부노트 5 · 초안/진단 4) + 15개 제목 재작성(전부 Grok director-pro 영상제작 시리즈 내부 코드네임 → 검색 가능 한글 제목). PASS 56 / CLEAN 37 / REVISE 0 / HOLD 17.
- 다음 배치(day2) 실측: 12개 전부 정상 PASS/CLEAN (13-midterm-eval-v2 → “갤럭시 S21 AI 워크스테이션 중간평가”, 16-textbook → “개발 일지를 교재로 바꾸는 방법” 등). 태그도
["S21","업무수첩","히스토리"]고정 → 주제별(데몬/교재/proot/회고)로. - 미해결(후속): 카테고리 배정 — history 110개는
category_map.py(설치가이드 전용 Ch1~5) 밖이라 여전히category=""(미분류). PART/Ch 정밀 taxonomy 별도 작업 필요. - 커밋:
aa26c41(director_gate.py + history_batch.py + overrides/report).
🗂️ 카테고리 taxonomy 배선 — 110개 history → 8Part·31Ch 매핑 (_Claude · 2026-08-15)
- 전제 확인: 권위 트리는
tistory-categories.txt(8 Part · 31 Chapter · 125 콘텐츠) — 이미 3레포에 복사돼 있었다.category_map.py는 설치가이드 전용(PART 1/2/5 일부)만 커버. - 구현:
history_category_map.py신설 —PART_TREE(31 Ch 참조) +HISTORY_CATEGORY(110개 원고→Ch 1:1).director_gate.py가category = history_category_for(fname)로 배선 → overrides → history_batch. - 커버리지: 110/110 매핑, 미분류 0. Ch 분포: Ch3.5 Director·연출 13개(Grok 시리즈) / Ch6.4 4로봇 10개 / Ch3.6 BGM·브릿지 8개 / Ch8.3 하이라이트 8개 등.
- ⚠️ 블로커(전제): PART 3/4/6/7/8 + Ch1.5·5.2·5.4 은 블로그에 카테고리 미생성 (설치가이드가 PART 1/2/5 일부만 생성). 해당 버킷 발행 전에
tistory-categories.txt로 생성 필요. 없으면_set_category가 조용히 미분류로 강등(크래시 아님, 로그만 “카테고리 설정 실패”). - 다음 배치(day2) 실측 카테고리: 13-midterm→Ch8.3 / 14-daemon→Ch7.1 / 15-proot→Ch1.2 / 16-textbook→Ch7.2 / 20-workcenters→Ch6.2 / 22-benchmark→Ch8.2 / 24-paste→Ch5.1 등.
- 커밋:
30e83e6(history_category_map.py + director_gate.py + overrides).
🗂️ 카테고리 블로커 해소 — 트리 이미 전부 생성돼 있었음 (_Claude · 2026-08-15)
- 박제:
94-three-week-review_Claude.md— 3주(392커밋/23일/6.2G) 회고. 자산화 목록(헬레나 RVC 목소리 클론·116개 교재 코퍼스·5블로그 전시장·파이프라인 4종) + 솔직 강평(NPU 가속만 유일한 미완의 벽, 코드 생산량≠자산). - 블로커 재검증: “PART 3/4/6/7/8 미생성”이라는 이전 기록은 오판. 라이브
/manage/category실측 → 41/500 = 8 PART + 32 Ch + 분류전체보기, SSOT 전 항목 존재(0 누락). 이전 결론은category_map.py가 설치가이드(PART 1/2/5)만 커버한다는 데서 나온 추론 오류. 실제로 08-14cre/cre2/del/rename프로파일 실험에서 전체 트리가 이미 시드돼 있었다. - 구현:
tistory-naver/verify_categories.py— 읽기 전용 게이트(SSOT vs 라이브 트리, 누락 시 exit 1).create_categories.py는 데드코드가 되므로 작성하지 않음(트리 완비가 전제면 생성보다 검증이 정답). - 효과: history 발행 시
_set_category가 더는 조용히 미분류로 강등되지 않음. day2 배치부터 정밀 카테고리 배치 확정. - 참고:
tistory-categories.txt헤더 “31 Chapter”는 실측 32 Ch(5+4+6+4+4+4+2+3)와 불일치 — 헤더 표기 오류(수정 안 함, SSOT 코드는 실트리 기준).
🌱 mynote11605 = 돌봄 데몬 채널 — 카테고리 계층형 재구축 (_Claude · 2026-08-15)
- 정체성 확정: mynote11605 = 돌봄(케어) 하이테크 IT 인프라 채널. “스토리를 기술적으로 케어하는 프로그래밍 영역” — 가족사(헬레나) 미러링 → 돌봄 데몬 솔루션. 순수 기술노트도 순수 스토리도 아닌 교집합. 기존
ecosystem-map.json“tech/박씨캡처 리버싱”은 폐기(Boss 정정). - 리버스엔지니어링: 티스토리 카테고리 생성 API =
PUT /manage/category.json {rootLabel, delete, append, update}. 새 노드 = 음수 temp id + parent(0=루트, 자식은 실 parent id) + depth(1최상위/2자식) + visibility 20. 갈라:create_categories.py(평면) →setup_care_categories.py(계층형 2단계). - 구조 (Boss 확정, 계층형): 매니페스토(01) · 트랙—제도DW/DC/BL · 대화록(05) · 솔루션—돌봄 데몬아키텍처/배터리·온도/위치·GPS/원격 돌봄망/보고 무전기. 평면 5개 삭제 → 4최상위+8자식 재구축 완료.
- 콘텐츠 처분 3버킷: 빵꾸 7편 삭제 · IT/기술 4편 → S21 · 돌봄 콘텐츠(DW/DC/BL·대화록·솔루션) 유입. ⚠️ 소망(라디오 초대권·노래 AI)은 돌봄 아님 → S21.
- 계획서:
90-mynote-care-daemon-plan_Claude.md(처분) ·91-mynote-care-daemon-dev-plan_Claude.md(10편 개발계획서). - 산출: 매니페스토1307301 / 트랙1307302 / 대화록1307303 / 솔루션1307304 / 자식 1307305~1312. (기존 IT·사고흐름은 전처리 후 정리 예정)
🧹 mynote11605 전처리 완료 — 글 11편 삭제 + IT·사고흐름 카테고리 정리 (_Claude · 2026-08-15)
- 아카이브: IT/기술 4편 원고 HTML →
archive/mynote11605-old-tech/(0004 박씨캡쳐 · 0011 티스토리플랫폼 · 0013 지식공장 · 0018 텔레그램봇회의실). S21 재편용 보존. - 글 삭제:
delete_posts.py신설 —GET /manage/posts.json(items 키, visibility=all) +DELETE /manage/post/{id}.json. #17 포함 11편 전부 삭제(잔여 0). - 카테고리 정리: legacy
IT(1306638+자식 1304528~32) +사고흐름(1306639) 삭제 →PUT category.json {delete:[...]}. - 결과 트리: 매니페스토 / 트랙[DW·DC·BL] / 대화록 / 솔루션[아키텍처·배터리·위치·원격·무전기] — 4최상위+8자식, entries 전부 0. 빈 캔버스 상태.
- 다음: Step 0 원고 규격 확정(템플릿 3종 + 품질 게이트) → Step 1
01 매니페스토페어 발행.
📐 Step 0 — 원고 규격 확정 (SPEC + 템플릿 4종 + 품질 게이트) (_Claude · 2026-08-15)
- 산출:
helana_log/docs/care-daemon/_templates/SPEC.md(규격 SSOT) +00-manifesto/track/dialogue/solution.md(템플릿 4종) +scripts/manuscript_gate.py(게이트, yaml 기반). - 규격 핵심: 편 = 질문 1 + 답 1. frontmatter 12필드 + category_id 고정맵(실측 1307301~1312). care 블록 7종(callout/threshold-table/bar-chart/timeline/flow/checklist/demo) — fenced
care type= id=+ YAML 페이로드로 인터랙티브·인포그래픽 선언, Pages=JS·티스토리=정적 fallback 렌더 계약. - 게이트 검사(5규칙→기계): 질문/답 단문 · sources 경로 존재(레포:경로 해석) · 필수섹션+확인창구 · 민감정보(주민·토큰·API키 FAIL, 전화·계좌·GPS WARN) · care블록 id↔interactive 일치. exit 1 = 발행 차단.
- 정제(계획 보정): 원고 홈을 기존
docs/tracks|dialogue|solutions(날것 메모)와 분리해docs/care-daemon/{type}/로 — 날것은sources:로만 인용. (91계획 “docs 하위”의 구체화.) - 검증: PASS 케이스 + FAIL 12건(빈 질문·type 불일치·category_id 오류·섹션 누락·토큰 노출 등) 실측 통과.
--all스캔 모드 동작. - 다음: Step 1 — 01 매니페스토 원고(01 1307301) 작성 → 게이트 → 페어 발행.
🧭 표면(웹/PWA) vs 엔진(네이티브) 레이어 분리 + 티스토리 과투자 금지 (_Claude · 2026-08-15)
- 발견: PWA/브라우저가 표면 레이어(콘텐츠·캔버스·UI)에선 네이티브 압도 — 핀치줌 공짜, 무한캔버스(translate+scale·Figma=WASM), 브라우저런타임(WASM/WebGPU/WebRTC/FileSystem-Access), 앱스토어심사·업데이트 없음.
- 경계(핵심): NPU(NNAPI)는 네이티브 전용 — 브라우저로 안 닿음(WebNN은 CPU/GPU지 NPU 아님). 백그라운드 상시감시(돌봄데몬)도 브라우저는 쓰로틀/킬. GPU(Mali-G78)는 WebGPU로 브라우저에서 가능. → 471초 TTS NPU가속 문제는 브라우저로 못 풂.
- 결론: 표면=브라우저(PWA), 엔진=네이티브/Termux. 스트림 A/B 구조와 정확히 일치.
- 전략(Boss): 티스토리는 빌린(임차) 플랫폼 — 내 플랫폼 아님. 서비스 종료 리스크 상시. 스킨 과개조·과투자 금지. 원본/SSOT는 항상 GitHub(내 것), 티스토리는 발행 미러일 뿐.
🖥️ 스크롤 컨테이너 제어 — 프레임 밖 흘러나감 근본 수리 + PWA 설치 버튼 (_Claude · 2026-08-15)
- 근본원인:
#s21-bezel(폰 프레임)은position:fixed테두리 오버레이다. 클리핑 컨테이너가 아니므로 스크롤 시 콘텐츠가 프레임 밖으로 흘러나왔다. (CSS 쌓임 맥락: fixed는 자기 쌓임 맥락을 만들고, 조상 transform/filter 없으면 overflow 클리핑을 벗어남.) - 해결:
html,body{overflow:hidden}고정 +#wrap을position:fixed(top:88px·bottom:16px·frame 좌우) 스크롤 뷰포트로 전환 → 프레임 안에서만 스크롤.#headerfixed z-10000,overscroll-behavior-y:contain,-webkit-overflow-scrolling:touch. 5블로그 전부 병렬 적용. - 실측 검증(픽셀, 스샷 불가 환경): PC(1280×900)·모바일(390×844)
getBoundingClientRect덤프 — bezel rect == wrap rect 정확 일치, body scrollY=0 고정,#wrap내부 스크롤, header top:0 고정, 파티클 전체뷰포트(overflow에 안 잘림). - 가로모드 부수효과(Boss 극찬): 콘텐츠가 프레임에 갇히니 “독립 OS 콘솔에 접속해 누나 서사를 관찰하는 디렉터” 시점이 살아남. 2열 분할 + 스타필드 깊이감으로 분위기 완전히 다름.
- PWA 설치 버튼: 우상단 카메라 아이콘 아래 “설치” 버튼(⤓). 정직한 한계: 티스토리는 service worker 호스팅 불가 →
beforeinstallprompt가 안 뜸 → 네이티브 설치 대신 브라우저별 수동 설치 안내 모달(Chrome “⋮→저장 및 공유→페이지를 앱으로 설치” / Edge “⋯→앱→이 사이트를 앱으로 설치”). PC 전용(모바일display:none).beforeinstallprompt핸들러는 GitHub Pages(자체 SW 가능)에 이식 가능한 상태로 남겨둠.
🌱 돌봄 데몬 Season 1 — 2/10 페어 발행 (매니페스토 + 트랙 DW) (_Claude · 2026-08-15)
- Step 1·2 완료: 편 01
돌봄 데몬이란 — 기술로 돌보는 법(매니페스토 1307301) + 편 02트랙 DW — 장애·정신건강 복지의 빈틈(트랙 DW 1307305) 페어 발행. - 페어 동기화: 티스토리(mynote11605) 0019·0020 ↔ GitHub Pages
care-daemon/manifesto/01-care-daemon+care-daemon/track/02-disability-welfare(같은 원고 md → 양쪽). - 남은 8편: 03 DC · 04 BL · 05 대화록 · 06~10 솔루션(아키텍처/배터리·온도/위치·GPS/원격 돌봄망/보고 무전기). 하루 1~2편, 품질 게이트 통과 후 다음 편.
🔍 커뮤니티 리서치 — “티스토리를 이렇게 쓰는 사람 있는가” (_Claude · 2026-08-15)
- 질문(Boss): “나처럼 티스토리를 headless CMS + 자체 UI(사이버덱)로 쓰는 사람 있는지 커뮤니티 리서치.”
- 결론: 완전체는 0건. “극한 커스텀 스킨 + 블로그 아닌 웹사이트” 검색 결과 없음. API 자동발행·커스텀 스킨·Claude Code 자동화 사례는 파편으로 존재하나, headless CMS + 서명 UI + SSOT 미러 조합은 확인 안 됨.
- 존재하는 파편: 서드파티 API 라이브러리(tispoon·pytistory·tistory npm·tistory-indexer) + GitHub 커스텀 스킨(Mangosteen·MINIMAL·Purity) + DEV Community “I Automated 7 Blogs With Claude Code and Came Back to One”(카카오 캡차·중복발행으로 7→1 축소).
- 핵심(외부 검증): 커뮤니티가 “공식 API 고장 → Playwright 우회 + 하루 15개 한도 + 캡차”로 수렴했다. 우리가 이미 독자적으로 도달한 경로(session 쿠키 + Playwright 발행, 15개 한도 실측)와 일치 — 이 구조가 맞다는 강한 외부 신호.
- 솔직 단서: ① SSL·커스텀 도메인 무료는 티스토리 기본 스펙(차별점 아님). 진짜 강점은 “headless + UI + SSOT 미러 + 품질게이트” 아키텍처 전체. ② 선구자=생태계 없음(장점이자 리스크). SSOT=GitHub 박아둔 판단이 그 리스크에 대한 정확한 대응.
- 포지셔닝: “티스토리를 이렇게 쓰는 사람은 커뮤니티상 최초.” 괴짜 짓이 아니라 방향이 맞음.
🚧 15개/일 한도는 “계정 단위” — 5블로그가 예산을 공유한다 (_Claude · 2026-08-15)
- 발견(편 03 발행 실패에서): 돌봄 데몬 편 03(트랙 DC) 티스토리 발행이 “발행 후 에디터 유지”로 실패. 역가져오기로 확인 → 신규 글 없음(임시저장도 미확인). 원인은 일일 한도.
- 핵심:
accounts.json5블로그(galaxys21·mynote·faith·piano·metalcare) 전부 같은 이메일 계정 → 티스토리 “하루 공개 발행 최대 15개”가 계정(이메일) 단위라 5블로그가 15개 예산을 공유한다. - 08-15 실측: 히스토리 배치 13개(galaxys21) + 돌봄 데몬 2개(mynote 0019·0020) = 15개 = 한도 도달. 편 03은 16번째라 차단.
- 전략적 영향: 히스토리 배치(하루 12개)와 돌봄 데몬 페어(하루 1~2개)가 같은 15개 예산을 경쟁. “히스토리 12 + 돌봄 2”는 한도 초과. 예산 배분(예: 히스토리 12 + 돌봄 2 + 여유 1) 또는 돌봄 우선순위 조정 필요.
- 편 03 상태: 원고·게이트(PASS)·페어 빌드(HTML+JSON) 완료. 티스토리 발행만 한도로 보류. 내일(08-16) 한도 리셋 후
post.py --post 03-dementia-care.json한 줄로 재발행.
🎓 출판 파이프라인 상품화 — 원클릭 부트스트랩 + doctor (_Claude)
- 배경: 커뮤니티 리서치 → 상품성은 교육·출판 시장. 진짜 장벽은 “첫 3시간” 온보딩(진입장벽 3중: Termux·AI CLI·출판 시스템).
- 판단: 설명서가 아니라 설치기(ONE-CLICK BOOTSTRAP) + 진단기(출판 doctor) + 출판 명령어 3종이 상품. → “개발자용 도구”가 “출판자용 도구”로 넘어가는 지점.
- 보안: API 키/GitHub 인증은 사용자 직접 입력·인증. 스크립트엔 비밀 하드코딩 금지(설치기=환경, 사용자=계정).
- 명제: “폰 한 대가 곧 출판사” · “기술이 어려운 게 아니라 첫 3시간이 어렵다.”
- 저장:
_notebook/95-publishing-bootstrap-doctor_Claude.md+ 오픈이슈 #2
✅ 편 03·04 발행 성공 — 진짜 원인은 networkidle 버그 (한도 아님) (_Claude · 2026-08-16)
- 결과: 편 03
트랙 DC — 치매·노인 돌봄의 빈틈(RSS #21) + 편 04트랙 BL — 기초생활 보장의 빈틈(RSS #22) 티스토리 발행 성공. RSS 교차검증으로 실발행 확정. mynote11605 총 4편 (01 매니페스토 · 02 DW · 03 DC · 04 BL). - 정정: 어제(08-15) “계정 단위 15개 한도 도달”로 단정한 건 오진. 자정 재시도(08-16 00:05)에서 드러난 실제 원인은
post.py의page.goto(wait_until="networkidle")버그 — 티스토리 편집기는 상시 폴링(자동저장)이라networkidle/load가 영영 불발 → 30초 타임아웃. - 진단 경로: ① 세션쿠키 TSSESSION 만료 검사 → 08-22까지 유효(세션 문제 아님). ② 인증된 curl → HTTP 200(로그인 리다이렉트 없음). ③
networkidle→load→domcontentloaded순으로 바꾸자 통과. 서버는 정상, 클라이언트 wait 조건이 문제. - 수정(4파일):
post.py·flip_visibility.py·repro_publish.py·diag_posts.py— Tistory 관리 페이지networkidle→domcontentloaded(kakao_login이 원래 쓰던 방식). - 메모리 정정:
history-daily-batch“계정 단위 15개/일” → 미실증(추정)으로 하향. 한도 공유 여부는 “하루 15개 초과 실제 시도”로만 확정 가능.
✅ 카드 발췌(요약) 패치 — summary는 설정 불가, 본문 재배치로 해결 (_Claude · 2026-08-16)
- 요청: mynote 카드 발췌(요약)가 “본문 덤프”라서,
answer(frontmatter 한 줄 요약)가 카드에 깨끗하게 뜨도록 패치. - 조사 결론(핵심): 티스토리 요약(summary)은 본문 텍스트 앞 400자를 서버가 자동 생성하는 값. ① 에디터 UI에 “요약” 입력란 없음 ② 에디터 임베디드 post 객체·
post-editor.min.js저장 payload({id,title,content,slogan,visibility,category,tag})에 summary 필드 없음(렌더에서e.summary읽기만) ③ 공식 OpenAPI에도 summary 없음. → 클라이언트 API로는 설정 불가. - 해법:
scripts/care_pair_build.py의render_tistory_article본문 순서 재배치 — ① kicker+answer를 한<p>로 합쳐 공백 연결(블록 경계에 공백이 없어 “Care Daemon정신건강”으로 붙던 것 제거) ② 인포그래픽·툴바(제목/섹션목록/버튼 라벨 재탕 오염원)를 intro 뒤로 밀어 요약 앞 160자에서 제외 ③ answer에 문장종결 부호 보강(다음 블록과 붙는 것 방지). - 결과·검증: 기존 5편(#19~23) 재발행 후 라이브 summary 확인 → “돌봄 데몬 · Care Daemon 정신건강·치매·생계… 이어진다.” 로 깨끗해짐. 재발행은 수정(edit)이라 일일 15개 새 글 한도와 무관.
- 적용:
scripts/care_pair_build.py— 이후 발행될 편 06~10에도 자동 적용.
📱 티스토리 스킨 — 앱 뷰어(리더) 모드 + 세션 유효성 검증 (_Claude · 2026-08-16)
- 요청: “모바일 보기” 버튼의 진짜 의도는 안드로이드 앱 뷰어(리더) 모드 — 카테고리·헤더·사이버덱 외곽 프레임을 숨기고 본문만 화면에 꽉 차게 크게 읽는 화면. 기존 구현은 “본문 폭만 좁히기(560px→none)”라 의도와 어긋남.
- 구현 (
body.s21-mobile재작성): ① 베젤·카메라·펀치홀·스타필드display:none②#wrap화면 전체(top/bottom/left/right 0)로 확장(베젤 해제) ③ 헤더 투명화 + 블로그명·네비 숨기고 복귀 버튼 “✕ 닫기”만 우상단 플로팅 ④ 본문 100% 폭(좌우 16px) + 폰트 17px. - 클래스 연동(핵심): JS
matchMedia('(max-width:900px)')로 실제 모바일 접속 시body.s21-mobile자동 부여 → 토글 버튼과 실제 모바일이 동일한 뷰어 CSS 공유. 데스크톱은 토글 on/off, 폰은 항상 뷰어(버튼display:none). - 전제(티스토리 설정): 관리자 → [모바일] → “모바일웹 자동 연결 사용 안 함” — 켜두면 카카오
/m/강제 스킨이 떠서 커스텀 뷰어가 안 먹힘. (공식 앱은 스킨 무시·자체 뷰어라 별개.) - 부수 버그 수정:
apply_layout.pyensure_logged_in이 “TSSESSION 쿠키 존재”만 보고 유효로 오판 →html.jsonJSON 응답 여부로 실제 검증. 재로그인(2FA 없음) 후 갱신 TSSESSION을 4블로그에 시드. - 배포: 5블로그(galaxys21·mynote·faith·piano·metalcare) 전부 재적용, 주입 검증 통과.
- 후속 보강 (같은 날): “모바일에선 버튼 숨김”을 뒤집어 모바일에서도 ‘🖥 PC 화면’ 토글 + ‘설치’ 버튼 노출. 모바일 기본은 뷰어(리더), 버튼으로 PC 화면(사이버덱 프레임) ↔ 뷰어 왕복. 라벨 컨텍스트별(데스크톱: 📱 모바일/✕ 닫기, 모바일: 🖥 PC 화면/📖 뷰어). 모바일은 localStorage 미저장 → 새로고침 시 항상 뷰어 기본. 5블로그 재적용 통과.
🎹 피아노 웹진 스킨 — S21 액자 프레임 유지 + 화면 안 클래식 웹진 (_Claude · 2026-08-16)
- 요청: 시리즈 3블로그(faith/piano/metalcare) 중 피아노부터 하이엔드 클래식 웹진(Gramophone/DG 스타일)으로 개조. 두 레인(스튜디오=IT 렌더링 / 매거진=종합 잡지)을 카테고리로 분리.
- 핵심 설계 전환(중요): 처음엔 “웹진은 사이버덱 프레임을 내려놓고 순수 잡지”로 구현했으나, Boss가 “S21 액자식 — 폰 프레임은 유지하고 화면 안에 웹진을 임베드” 로 정정. 프레임(베젤·카메라·펀치홀·스타필드)은 모든 블로그 공통, 블로그마다 다른 “앱”이 화면 안에서 돈다(galaxys21=사이버덱 / piano=웹진 / mynote=대시보드).
- 구현 (
apply_layout.py): ① 사이버덱 장식을_CYBERDECK_DECOR로 분리 →render_layout()이 항상 주입 ②THEME_MAP["piano"]에variant:"webzine"+ 골드/아이보리 테마 ③_webzine_style(): 네이비/블랙 배경 + 세리프(Cormorant Garamond) 마스트헤드 + 커버 히어로(최신 글 전체폭 42px) + 3열 카드 그리드. - DOM 함정(실측): 이 커스텀 스킨(
customize/8935245)은 글 목록이body.post-type-text > #content > .inner > div.post-item(ul/li 아님)..post-type-*는 body 클래스라 baseskin-premium.css의.post-type-text … !important가 실제 매칭 → variant CSS에서 font-size/padding에!important로 이겨야 함. 그리드 컨테이너는#content .inner:has(.post-item). - 검증: 헤드리스 Playwright 계산 스타일로 — 프레임 유지(bezel fixed, wrap 26px radius) + 3열 그리드 + 커버 히어로(42px/44px) + 세리프 마스트헤드 확정. piano 재적용 POST 200·마커 통과.
- 다음: ① 두 레인 카테고리 재구성 ② 첫 소재 “S21에서 피아노 음악 렌더링” 발행.
🎹 피아노 웹진 — 두 레인 카테고리 + 첫 소재 발행 (일일한도 블록) (_Claude · 2026-08-16)
- ① 두 레인 카테고리 재구성(완료):
category.jsonPUT으로 5개 플레이스홀더(“1”~”5”)를 재구성 — 레인1 「스튜디오」(#848657, 하위 파이프라인#852048·도구 제작#852049) + 레인2 「리뷰」「인터뷰」「감상」「이론·악보」. 서버 검증 통과(스튜디오 entries=1은 기존 플레이스홀더 글). - ⚠️ 명명: 계획서의 “IT 음악 렌더링” 대신 Boss가 구어로 쓴 “스튜디오”를 레인1 이름으로 채택(하위 2개가 IT 정체성을 담당). 원하면 rename 1회로 교체 가능.
- ② 첫 소재 발행(블록): “손바닥 위의 그랜드 피아노 — S21에서 MIDI를 렌더링하는 방법” 기사 작성(레포
helena-piano/bgm/파이프라인 기반, markdown→template.py→posts/piano-01-s21-render.json, 카테고리=스튜디오). 발행 시도했으나 차단. - 근본 원인(실측): 발행 버튼 클릭 시
alert다이얼로그 — “하루에 새롭게 공개 발행할 수 있는 글은 최대 15개까지입니다.” → 계정 단위(5블로그 공유, [[history-daily-batch]]) 일일한도가 오늘 이미 소진. sitemap 오늘자 lastmod: galaxys21 8 + mynote 11 + piano 1 + metalcare 1 = 21건(편집 포함). - post.py 개선: 다이얼로그 핸들러 추가 — “15개” alert를 로그·실패 마킹(이전엔 Playwright 자동 dismiss로 “발행 실패”만 남아 원인 불명), 임시저장 confirm은 dismiss(새로 시작).
- 다음: 내일(00:00 KST 한도 리셋)
python3 post.py --post posts/piano-01-s21-render.json재실행 → 공개 발행. 기사 소스·JSON은 커밋 완료(재발행만 하면 됨).
🎹 피아노 웹진 — 첫 기사 비공개 발행 + “몰아쓰기→순차 공개” 워크플로 (_Claude · 2026-08-16)
- 비공개 발행 확정(실증): Boss 제안대로 “비공개는 15개/일 공개한도에 안 걸린다”는 것 실증 — 첫 기사(손바닥 위의 그랜드 피아노) 비공개 발행 성공. id=2, 카테고리=스튜디오, permalink
https://helena-piano.tistory.com/2, statusLabel=”비공개글”. (공개 발행 시도는 “하루 15개” alert로 차단됐던 것과 대비.) - 워크플로 확립: “몰아서 비공개로 쌓기 → Boss 확인 → 순차 공개 전환” 이 표준. 비공개 생성은 한도 무관(대량 배치 가능), 공개 전환만 15개/일 한도.
flip_visibility.py로 공개 전환. - post.py 다이얼로그 핸들러 실전 확인: 임시저장 confirm dismiss(새로 시작) + “15개” alert 로깅 — 이번 발행에서 둘 다 정상 동작.
🎹 피아노 웹진 — 좌/우 2단 레이아웃 복구 + PC·모바일 양모드 검증 (_Claude · 2026-08-16)
- 회귀 원인: 내가
_webzine_style()에section.container { flex-direction: column }+#category-nav { flex:none; width:100% }를 넣어, Boss가 만든 “카테고리 좌측 + 콘텐츠 우측” 2단 flex를 깨뜨림(전부 모바일 최적화로 변질). PC 화면 디폴트값이 사라짐. - 수정: 그 오버라이드 제거. base
section.containerflex-row·#category-nav250px sticky·#content flex:1원형 유지 + 웹진은 색·타이포만 리테마(골드·세리프·카운트 배지). 스테일 주석(“웹진은 프레임 없이”→”프레임 공통”)도 정정. - 검증(PC, Playwright getComputedStyle):
flexDirection:row,#category-navx=168(좌)·flex:0 0 250px,#contentx=450(우), 펀치홀::before·줌컨트롤 복귀. body classlayout-wide color-bright post-type-text paging-view-more(s21-mobile 없음 = PC 디폴트 살아있음). - 검증(모바일=리더, viewport 390px):
matchMedia로body.s21-mobile자동 부여 →#category-nav/#s21-bezeldisplay:none,#wrap전화면 고정,#content348px 전폭, 웹진 네이비→골드 radial-gradient + 세리프 마스트헤드 그대로. 두 모드 모두 웹진이 얹힘 → Boss 요구 “PC 화면·모바일 화면 둘 다 액자/뷰어 위에 잡지” 충족. - ⚠️ 미해결: 공개 홈
#content .inner자식 0(글 목록 안 뜸), 카테고리 카운트 전부 “(0)”. manage API상 공개글 id=1(“Galaxy21 Proot R&Scope”)이 있는데 리스트 미노출 — 캐시/페이지(글 아님)/커버모드 가능성. 첫 기사(id=2) 공개 전환 시 재확인 필요. - 다음: ① id=2 공개 전환(
flip_visibility.py) 후 홈 노출 확인 ② 홈 0글 미해결 원인 파악 ③ 레인2 첫 기사.
🎹 피아노 웹진 — 홈 0글 원인 해명 + 첫 기사 공개 전환 차단(한도) (_Claude · 2026-08-16)
- 홈 0글 = 버그 아님(해명):
posts.json(visibility=all) totalCount=1, 오직 id=2(비공개)뿐. id=1 “Galaxy21 Proot R&Scope”는 글이 아니라 “페이지”(글 목록·카테고리 카운트에 미집계)라 공개 홈 “(0)”이 정상. 공개 글이 0개라 커버 히어로가 비어 보였던 것. → id=2 공개 전환하면 채워짐. - 공개 전환 시도(차단):
flip_visibility.py --account piano --ids 2 --visibility public→ 본문 5436자 로드 확인, 공개 설정·댓글비허용 OK 후 발행 클릭에서 “하루 15개 공개” alert → 오늘 계정 한도(5블로그 공유) 소진으로 차단. id=2 비공개 유지. - flip_visibility.py 개선: 다이얼로그 핸들러 추가(기존엔 alert 자동 dismiss로 “❌ → public”만 남아 원인 불명) → alert 메시지 로깅.
- 다음: 자정(KST) 한도 리셋 후 같은 명령 재실행 → id=2 공개 → 홈 커버 히어로 노출 확인.
🎹 웹진 디렉터 역할 신설 + 방법론 확정 (사진→Grok 루프 폐기) (_Claude · 2026-08-16)
- Boss 방향 확정 (3건): ① 페이지 유닛은 “사진 찍어 Grok 코딩” 루프 없이 직접 CSS/HTML 모듈로 빌드 ② 시각 파싱이 필요하면 Gemini/ChatGPT(비전) 사용 — Grok은 이 작업에 안 씀(Grok 2칸=잡지 구도 이미지+딥페이크 다큐만, 쓸 이유 없음) ③ 「웹진 디렉터」역할 신설 — “피아노부터 시작하는 세계 히스토리” 웹진 편집·페이지 유닛 설계·발행 총괄, 이 방법론 실증.
- 맥락: Grok이 “사진 올리면 HTML/CSS 스펙으로 파싱해주겠다”고 제안했으나, Boss가 “Gemini나 ChatGPT 쓰는 게 낫고, Grok 여기 쓸 이유 없다”고 판단. 이전 메시지(“사진 찍어서 하나하나 안 해도 될 거 같다”)와 합쳐 직접 빌드가 주 방법론으로 확정.
- 의미: 웹진 제작이 Grok 플러그 의존에서 벗어나, 출판부(_Claude)가 유닛을 직접 짜는 방식. Grok은 딥페이크 다큐 등 원래 칸에만 선택 투입.
- 다음: ① 역할 문서 정식화(Boss 확정 후) + CLAUDE.md 에이전트 표에 5번째 등재 ② 레인1 기사 공개(자정 후) ③ 레인2 첫 페이지 유닛을 웹진 디렉터 방법론으로 직접 빌드.
🎹 피아노 웹진 — 맥시멈 구축 완료: 11편 비공개 발행 + 공개 전환 준비 (_Claude · 2026-08-16)
- Boss 지시: “비공개여도 좋으니 맥시멈으로 웹진 다 만들어… 자율주행” → 레인1(스튜디오 튜토리얼 4편) + 레인2(감상 3·리뷰 1·이론 1) 9편 신규 작성·비공개 발행 완료.
magazine.py신설: markdown(+frontmatter) → 잡지 HTML 렌더러.:::audio URL|제목(오디오 플레이어),:::figure key|캡션(이미지 figure),mag-dropcap/mag-title/mag-hero잡지 스타일.assets/magazine-images.json= 퍼블릭 도메인 작곡가 이미지 6장(debussy/satie/bach/chopin/tchaikovsky/piano — upload.wikimedia.org 원본 URL 전부 200 검증, 640px 섬네일은 400이라 원본 URL 사용). MP3는 GitHub Pages CDN(helena751107.github.io/helena-piano/bgm/output/*.mp3) 스트리밍.- 발행 결과: 9편 전부
visibility:private성공(성공 9/실패 0). tinymcesetContent+save()경로로<audio>/<figure>/<img>보존(본문 검증 통과). 댓글 비허용 강제 적용. (다이얼로그 dismiss 경고 1건은 benign — 이미 자동 처리된 alert 재해제 시도, 발행엔 무영향.) - 전체 글 11편(전부 비공개):
list_piano_posts.py(신규,a.link_cont로 제목·ID·공개상태 덤프)로 확인 — #2 손바닥위 그랜드피아노(스튜디오, 기존) · #3 달빛(감상, 기존) · #4~6 감상(짐노페디·BWV846·라크메) · #7~10 스튜디오(MIDI·SoundFont·인간화·자동화) · #11 리뷰(백조의호수) · #12 이론(화성). - 글로브 버그 수정:
piano-0{3..11}brace가piano-010/011로 잘못 확장 → piano-10/11 누락. 명시 경로로 재렌더 해결. - 공개 전환 준비:
flip_visibility.py --account piano --ids 2,3,4,5,6,7,8,9,10,11,12 --visibility public(11편 < 15개/일 한도, 1회 실행). 단 Boss 리뷰(교체 이미지) 후 실행 — Boss 프로세스 “업로드된 거 보고 → 갈아끼울 이미지 생성 → 공개 전환”. - 다음: ① Boss 리뷰 + 교체 이미지 접수 ② 본문 figure 교체(이미지 스왑) ③ 11편 일괄 공개 전환 ④ 홈 커버 히어로 노출 확인.
🚦 터닝 포인트 — 빌드 멈춤 → 열고 가르치기 (Boss 확정 · _Claude · 2026-08-16)
- Boss 기점 선언: “오너를 기점으로 터닝 포인트. 더 이상 뭐 만들지 말고, 사람들한테 오픈해서 따라오게. 다 오픈소스로 기능 다 오픈, 콘텐츠를 하나하나씩 찍어 나가는 과정으로. 기능 업데이트 = 교육 튜토리얼.”
- 기술·비용 한도 못박음: 기술 = 핸드폰 1대(구형 S21 → proot PC화 워크센터). 비용 = Claude Code + DeepSeek/Aider ~$20. “이 한도면 누구나 똑같이 가능”이 증명값. Grok $30은 별도 선택 레인(이미 2칸 축소).
- 오픈소스 확인: 5레포(helena_phone·helana_log·helena-piano·helena-metalcare·helana-faith) 전부 PUBLIC. 헌법 제2조 “코드는 선물 — 저작권 무의미”가 이미 오픈소스 철학 못박아둠.
- 의미: 평가 기준이 “코드 생산량” → “남이 따라올 수 있게 설명했는가”로 뒤집힘. 저사양·저비용이 브랜드. 제품 = 과정의 기록.
- 산출물:
98-turning-point-2026-08-16_Claude.md(기점) + 메모리turning-point-open-tutorial-baseline. 헌법 제9조 개정안은 Boss 확인 대기. - 다음: ① 헌법 제9조 확정 ② 튜토리얼 로드맵·첫 편 주제 선정 ③ 첫 튜토리얼 1편 제작.
📍 포지셔닝 확정 — Grok 재고조사 평가 · 해자 재정의 · AI 네이티브 (_Grok·Boss · 2026-08-16)
- 재고조사(97)에 대한 Grok 평가: “과장 없이 숫자·실물로 정리한 재고 장부” — 완성도 8.5·정직함 9·해자포착 8·스토리 8. 보완 3건: ① 돌봄 데몬을 별도 솔루션으로 전면 배치 ② “총 AI 비용 ≈ $20 / 디바이스 = S21” 한 줄 명시 ③ 해자 문장 날카롭게.
- Boss 반론 → 해자 재정의: Grok의 “해자=도구+콘텐츠 밀도”를 뒤집어 → “복제 가능한 건 전부 공개, 복제 불가능한 건 ‘이 스토리를 실제로 산 사람’으로서의 퍼포먼스와 진정성.” 솔루션을 파는 프로그래머 프레임은 안 맞고, 코드는 공짜로 풀고 퍼포먼스 라이트로 승부.
- 자기 규정 “AI 네이티브”: 파워유저(도구 잘 다룸)를 넘어 “AI를 손과 발로 삼아 사는 방식”. “비싼 장비+코딩 실력” 전제를 깨고 “5년 된 폰 + 싸구려 에이전트 + 목소리만으로” 최소 인프라 세움. 지속성으로 증명되는 정체성. 홍보·자기소개용.
- 저장:
97b-s21-solutions-showcase-evaluation_Grok.md(평가+재정의+AI네이티브 3층) + 메모리moat-is-performance-not-code. 97 재고조사 바로 밑에 위치. - 다음: 이 포지셔닝 기반 “해자 백서 최종본” 작성(Boss 지시 대기) + 튜토리얼 첫 편.
🧭 전 레포 목적·랜딩·방향성 재정렬 — 터닝포인트 반영 (_Claude · 2026-08-16)
- Boss 지시: “한 바퀴 돌고 터닝포인트 됐으니, 전 레포 목적·랜딩 방향성·자산 설정 다 업데이트.”
- 톤 확정(혼합): hero·description은 샤프한 CI 한 줄(“말로만 · 폰 하나로 · 누나를 위해”), 본문은 기존 동화식 유지. “호기심이 문 열고 돌봄이 붙잡는” 구조.
- 3레포 실행 완료:
- helena_phone(허브): README “주머니 속 마법 공구상자” → “말로만 · 폰 하나로 · 누나를 위해” ($55,000→$20 한도, Grok $30 별도 선택). index.html meta·히어로·비용 차트·Grok 카드(2칸) 갱신. GitHub description 설정.
- helana_log(돌봄): README 신설(“헬레나가 사는 법 — 돌봄을 기술로 번역”). description+homepage 설정.
- helena-piano(웹진): README 스텁→확장(두 레인), index.html meta·히어로 “미니 스튜디오”→”클래식 웹진” 갱신. description+homepage 설정.
- 서브모듈 포인터 정리: helana_log·helena-piano gitlink 갱신(부모 3커밋).
- 다음: ① metalcare·faith 2레포(Boss 방향 입력 대기) ② ⚠️ git remote에 GitHub PAT 내장 — 보안 점검 필요 ③ 헌법 제9조 확정.
🧭 metalcare·faith 정체성 확정 — 조현병 알아가기 + 종교 판타지 (_Claude · 2026-08-16)
- Boss 방향 입력 완료 (전 레포 재정렬의 마지막 2레포):
- metalcare(돌봄 트랙): 누나의 조현병을 “죽기 전에 진짜로 알아가는” 과정. 환청 음성화 · 약 분석 · 전문의 상담 · 뷰티풀마인드 미러링 · 환자 대본 설정.
- faith(종교 판타지): 종교 판타지 채널. 의심하는 토마스(본인)가 기독교·천주교·불교를 넘나드는 “제3의 시각”으로 교리가 아닌 의심·상상에서 진짜 신앙을 찾음. 누나 문답 + 신학대학원생 조카 질문.
- MetalCare 이름 재해석: MentalCare 오타를 고치지 않고 중의적으로 살림 — “Metal(금속)처럼 강력한 하나의 기준(잣대)을 찾는 돌봄(care)”. AI 한계 단위 교훈과 맞물림.
- 경계 반영(제15조·의료/신학 단정 금지): README·랜딩 meta/hero·CLAUDE.md에 명시. ⚠️ Boss가 부른 “REDACTED”는 실명 추정 → 공개문 전부 “누나/헬레나”로 통일, CLAUDE.md·메모리에 “REDACTED 금지” 못박음.
- 실행: description(gh) + README + index.html meta/hero/title + CLAUDE.md 경계, 각각 커밋·푸시. push는 PAT 없이 gh 자격증명 헬퍼 사용(보안 패턴 검증).
- 다음: ① REDACTED = 실명/가명 확인(공개 핸들 확정) ② 환청 음성화 → 목소리 전략(3트랙) 연결 ③ git remote PAT 내장 정리(Boss 승인 대기).
🧭 CI 빨간불 2건 정리 — Pages 스테일 errored + 유령 Acceptance Tests (_Claude · 2026-08-16)
- Boss 지시: “지금 제대로 만들어 놓은 게 맞는지 냉정히 평가” → CI 맵 작성 후 실측 결과 빨간불 2건 발견 → “두 개 다 조사해서 고쳐”.
- ① 허브 Pages
errored: - 진단:
pages/builds최신 2건 = commit5d0fcea, “Page build failed”,2026-07-25. 레거시(gh-pages 브랜치) 빌드 실패가 스테일로 남은 것.build_type:"workflow"+source.branch:"gh-pages"공존 = 반쯤 전환된 상태. - 실상: 실제 배포는 정상. deploy-pages.yml deploy job success · 사이트 HTTP 200 + 최신 콘텐츠(metalcare 마커) 서빙 · workflow deployments(actions/deploy-pages) 계속 성공.
- 조치: PUT
build_type=workflow(204, 이미 workflow) + gh-pages 브랜치 삭제→복원 시도 → 스테일 캐시라 API로 안 풀림. 사이트 기능 영향 없음. fresh deploy로 자연 소거 여부 관찰. - ② Acceptance Tests 빨간불 (유령):
- 진단: OS가드 6종(acceptance·design·feedback·issue·router·rule)은 dtslib “선물” 스캐폴드. 참조하는 AI-OS(
config/system.json·feedback/feedback.json·maps/lanes.json·scripts/interpreter.js)는 포팅 안 됨(디렉토리 부재). GIFT.md 154행이 이미 “dtslib 코드 = 치트시트, 실제 자동화는 우리 scripts/”로 결정. - 조치: 6종 워크플로 전부
git rm. 남은 CI = deploy-pages + tistory-sync(정상). - 후속: helana_log(서브모듈)에도 issue-terminal·acceptance-tests·router-compiler 3종 동일 유령 — 별도 레포라 다음에 정리.
🧭 생태계 전수 검증 + helana_log 빨간불 수정 (_Claude · 2026-08-16)
검증 결과 (실측): CI·생태계 전수 점검 → “채널·콘텐츠 매핑은 잘 배치, 인프라 배선은 반쯤 이행” 판정. 실측 문제 4건.
수정 #1 (완료·검증): helana_log “Log → Telegram” 빨간불.
- 원인: log-to-tistory.yml이 helena751107/helena-programming(삭제됨, 404)을 checkout → 08-14부터 실패.
- 조치: log_to_telegram.sh + parksy_to_html.py(자립형, stdlib만)를 helana_log/scripts/로 내장, checkout 스텝 제거, _converter/... → scripts/... 경로 교체.
- 커밋 acd670d, workflow_dispatch 재실행 → success 확인.
남은 3건 (Boss 지시 대기): ② Render BGM 실패(07-28~, SF2 캐시 버그) · ③ 서브모듈 배치 불일치(helena-piano gitlink 무등록, faith/metalcare 미등록) · ④ Pages build_type 분열(허브=workflow, 나머지=legacy).
🧭 중앙 총재 보일러플레이트 — 복사붙여넣기 즉시 구동 (_Claude · 2026-08-16)
기점 “빌드 멈춤 → 열고 가르치기” 실행. 5레포 생태계를 하나의 보일러플레이트로 — “Use this template → navigator → spawn → 구동” 10분.
5단계 완료 (커밋 5종, 5레포 push):
1. 변수 외부화 — configs/ecosystem.json.template(SSOT 샘플) + scripts/load_ecosystem.py(real→template 로더). 하드코딩 7개 스크립트(publish/history_batch/yt_upload/save_tistory_cookie/magazine/session_post/diag_posts)가 로더 import.
2. reusable workflow 화 — tistory-sync 5중복 → helena_phone workflow_call 1개 + 각 레포 3줄 caller(uses: ...@main).
3. 내비게이터 — navigator.sh: gh auth → owner/블로그/채널 → BotFather·Google Cloud·Discord 발급 안내 → ecosystem.json + .secrets.env 생성.
4. 스폰 엔진 — g/spawn.sh: ecosystem.json → gh repo create --template + gh secret set(TG만, idempotent) + install.sh SPAWN_ECOSYSTEM=1 단계.
5. 가이드 — README “10분 시작” + secrets-template.env 23키 스키마.
핵심 판단: Lean(gh CLI + reusable workflow) 채택 — Copier/Terraform은 “또 하나의 설치 장벽”. 드리프트 동기화는 reusable workflow가 자동 처리(중앙 수정 → 복사 레포 자동 반영).
🔴 보안 발견·조치: 3레포(허브/piano/log) remote URL 에 PAT ghp_... 내장 확인 → git remote set-url 로 전부 제거, push 는 gh auth git-credential 로. ⚠️ 해당 PAT 즉시 폐기·재발급 권장.
남은 (Boss 지시 대기): 11편 공개 전환 · render-bgm SF2 캐시 · 서브모듈 등록(helena-piano/faith/metalcare) · Pages build_type 표준화.
🧭 서브모듈 등록 정리 — 위성 4레포 일관 등록 (_Claude · 2026-08-16)
Boss 지시: “서브모듈 등록 정리해줘” (deferred ③ 해소).
- 진단:
.gitmodules에helana_log(url./helana_log)만 등록돼 있고, gitlink는helana_log·helena-piano2개만 스테일(구 HEAD) →fatal: no submodule mapping found for helena-piano. metalcare/faith는 아예 미등록(untracked full-repo). - 조치:
.gitmodules4위성 전부 절대 URL(https://github.com/helena751107/{repo}.git)로 재작성 + gitlink 4개 전부 현재 HEAD 갱신. - piano
a054464· metalcarec43105a· faith312f860· log20cf94e - 커밋:
e8ce77c(push 완료).git submodule status에러 해소 확인. - 노트: 새로 등록된 3개는 로컬 미초기화(
-프리픽스) — 정상. fresh clone 에서git submodule update --init시 4개 전부 체크아웃.
🎣 네이버·Threads = 미끼 채널 (downstream 수작업) (_Claude · 2026-08-17)
Boss 결정: 네이버(나이 든 층) + Threads(젊은 층)를 “미끼 채널”(트래픽 유입용)로 정함.
- 우선순위: 콘텐츠 파이프라인에서 먼저 안 만든다. SSOT(git)에서 콘텐츠가 완결되면 그때 뒤에 붙는 downstream 발행(SCM 훅).
- 수작업 방식: Claude가 텔레그램으로 원고 보고 → Boss가 복사·붙여넣기 (기존 Paste Pipeline과 동일).
- 채널별 현실: 네이버 = 쓰기 API 없음 → 수작업(paste) 확정. Threads = Meta API 있음(500자+링크, 250/일) → 나중에 “완결→자동발행” 옵션은 존재, 지금은 수작업.
- 설계 원칙: 미끼는 “정본을 만드는 곳”이 아니라 “정본으로 데려오는 곳”. GitHub=정본(SSOT), 네이버·Threads=배수로.
🔒 공개 5레포 git 히스토리 시크릿 전면 스크럽 (_Claude · 2026-08-17)
계기: 외부인이 보는 우리 레포를 점검하다가, 히스토리 전역에 개인 식별자(봇 토큰·챗ID·이메일·실명·비공개 GitHub 계정명)가 다수 남아있음을 확인.
- 조치:
git filter-repo --replace-text로 허브 + 위성 3개(piano/metalcare/log) 히스토리 재작성. faith는 원래 clean. 패턴은 전부REDACTED치환,.pyc바이너리는 경로 스트립. - 식별자 범주(값 비공개): 봇 토큰 4종 · 챗ID 2종 · Discord ID 3종 · 이메일 7종 · 실명 · 비공개 계정명 2종 · bot 이메일 1종.
- 결과: 5레포 전부 잔여 0건 검증 → force-push → 허브의 서브모듈 gitlink 3개를 새 HEAD로 갱신(
aaf7c53). - 노트:
doolan은 바이너리 MIDI 메타데이터(제3자 시퀀서 태그)라 제외 — 우리 신원 아님. - 🔴 남은 수동 조치: 히스토리 삭제는 토큰을 무효화하지 않음 — 유출됐던 봇 토큰 4종은 BotFather에서
/revoke로 즉시 회전 필요. 로컬 백업 번들(/root/*_backup.bundle+.git/filter-repo/)은 복구용으로 보관(비공개).
🌍 README 영문 전면화 — 외국인 주목 레인 (_Claude · 2026-08-17)
Boss 지시: “외국 사람들한테 주목받는 수능선이 됐으면. 영문으로 좀 멋있게.”
- 진단: 프로필 README는 영문이 잘 돼 있으나, 정작 외국인이 클릭해 들어오는 5레포 README는 영문이 3~9줄 스텁이고 나머지 90%가 한국어였다 → “오 좋네” 하고 들어와서 읽을 게 없어 이탈.
- 조치: 허브 + 위성 4개 README를 영문 우선 완전본으로 재작성. 한국어는 하단
worked example로 유지(진정성·바이링구얼 차별점). 기존 프로필 보이스(“The flex”·”One phone. The whole stack”·”The moat isn’t the code”)에 정렬. - 경계 준수: metalcare/faith/log — 신원(이름·위치·사진) 노출 금지, 의료·종교 단정 표현 금지 유지.
- 결과: 5레포 커밋+푸시 완료, 허브 gitlink 4개 새 HEAD 갱신(
d22d2d3). - ⏳ Grok 레인 대기: 히어로 이미지·소셜 프리뷰(Open Graph) 이미지 — “잡지 구도 디자인” 칸①에 해당 → Boss가 Grok에 라우팅.
🌍 진입점 스크립트·설정 템플릿 영문화 + 원조 서사(Made in Korea) (_Claude · 2026-08-17)
Boss 보강 지시(2회): “깃허브 소스 코드는 외국인이 가져다 쓰게 유저 프렌들리하게” + “토종 한국인 개발자·폰 한 대·누나 돌봄” 서사가 진짜 차별점.
- 경계 확정(2트랙): 허브 Pages = 한국어(국내 “누나를 위해” 스토리·한글 강의) / GitHub 소스 코드 = 영문(외국인 fork·실행). → 글로벌 선배포로 국내 표절 이전에 “원조 = Helena Park” 고정.
- 스크립트 영문화(로직·데이터 불변, bash -n 검증):
navigator.sh·g/install.sh·g/spawn.sh·scripts/preflight.sh·scripts/make_pair.sh전부 0 한국어. 설정 템플릿 4종(ecosystem.json.template·quota-manifest.json·bait-voice.json·accounts.json.template)도 영문 — 단 고유명사·디렉토리명(기자·교육방송국등)은 데이터로 보존. - 원조 서사(README·프로필): “Made in Korea — 토종 한국인 개발자(교포 아님)·인천·구형 S21 한 대·누나 돌봄·~$20” 을 허브 README hero + 프로필 README
## The origin섹션에 명시. 진정성이 곧 해자. - 결과: 허브 2커밋(
i18n:·docs:) + 프로필 1커밋 푸시 완료. 남은 자산 레인은 Grok(히어로·소셜 프리뷰 이미지).
🖼️ Grok 히어로·소셜 프리뷰 6장 배선 (_Claude · 2026-08-17)
Boss 지시: Grok이 만든 이미지 6장(Download 폴더)을 프로필 배너 + 5레포 소셜 프리뷰로 배선. “생성 시간 반대로 가면 숫자.”
- 매핑(타임스탬프 18:48:32→18:53:29 = 생성 순 1→6): 1=프로필 배너, 2=허브, 3=piano, 4=metalcare, 5=faith, 6=log. 바이트 크기로 교차 검증(360284/302957/432974/309000/420074/411117 전부 일치).
- 배선: 프로필 README 최상단 배너 + 5레포
assets/social-preview.jpg+ 각 README 히어로 이미지 +index.htmlog:image교체(helana_log는 og 태그 신설). - 한계: GitHub의 진짜 “social preview”(레포 Settings→Social preview) 업로드는 Web UI 전용(API 없음) → README 히어로 + Pages
og:image로 대체. Grok 워터마크(로고)는 Boss가 인지한 상태로 사용. - 결과: 6레포 커밋(
feat: social preview) 푸시 완료.
🌍 GEO 정체 그래프 — 티스토리 5블로그 원조 새김 (_Claude · 2026-08-17)
Boss 승인: “원조(Origin)를 사람 눈과 기계 눈 둘 다에 새기자” → 헌법 제5장·제17조 승격. GitHub 5레포(llms.txt·JSON-LD·canonical·sitemap)에 이어 남의 땅(티스토리)에도 원조 좌표를 심는 작업.
- 배경: 티스토리는 남의 루트라
llms.txt를 못 박음 → JSON-LD 정체 그래프(Identity Graph)로 “이 블로그도 결국 GitHub의 Helena Park”라고 LLM 크롤러가 재구성하게. - 도구:
tistory-naver/apply_geold.py— 스킨<head>의</head>앞에 JSON-LD(Person@id=github.com/helena751107#person +sameAs+ WebSitepublisher→Person) 멱등 주입.<!-- HELENA-GEO-START/END -->마커로 재적용 시 블록 교체(멱등). - 5블로그 실적용·검증: galaxys21 / mynote / faith(helana-christianity) / piano / metalcare 전부 POST 성공 + 외부 렌더에서
helena751107#person2회 등장 확인. - 경계 준수: 신원(이름·위치·사진) 노출 금지 — Person 설명은 공개 페르소나 “Helena Park” + “Made in Korea — not a developer”로만. 네이버는
<script>(JSON-LD) 제거되므로 텍스트 한정(다음 레인). - 결과:
apply_geold.py커밋·푸시(feat:). 남은 레인 = YouTube 2채널 About·설명 원조 라인 → 네이버 글 푸터 텍스트.
📺 YouTube GEO 원조 라인 + “블록체인 등기” 표현 정정 (_Claude · 2026-08-17)
작업(헌법 제17조): YouTube 2채널에 “원조 · Origin — github.com/helena751107” 라인 주입. scripts/yt_geo_origin.py 신설(검사/적용, 멱등).
- phone(@helena_phone): About + 영상 12개 전부 원조 라인 추가 완료.
- main(@HelenaPark-e7c, 브랜드 계정): 현재 OAuth 토큰(galaxys21-pwuser)으로 읽기만 가능, 쓰기 403 —
brandingSettings(About)도videos.update(영상 설명)도 차단. 수동(YouTube Studio) 또는 브랜드 계정 재인증 필요. ⏳ Boss 수동 레인. - 버그 수정:
yt_upload.pySCOPES에yt-analytics.readonly포함 → refresh grant가invalid_scope로 거부돼 모든 YouTube 호출이 막히던 것 → 스코프 제거로 해결(device flow 미지원 스코프).
결정적 전환 — “블록체인 등기” 표현 정정(Boss 질문에 대한 정직 답변):
- Gemini가 JSON-LD를 “블록체인 지적재산권 등기”로 과장 → 아님. 암호화·위변조방지·분산원장 없음. 평문 메타데이터. 법적 저작권도, 실시간 원조 판정도 아님.
- 정확한 비유: 자필 서명·표제지·ISBN 같은 정본 식별 표식. 정직한 크롤러가 원본을 가리키는 화살표. 확률적 우위(결정적 강제 아님) — 베낀 놈은 JSON-LD도 같이 긁거나 떼버림.
- 진짜 해자 = 퍼포먼스·진정성([[moat-is-performance-not-code]]) — GEO는 그 위에 다는 이름표.
🌐 네이버 GEO 원조 텍스트 — 서식 푸터 (_Claude · 2026-08-17)
작업(헌법 제17조): 네이버는 <script>(JSON-LD)를 제거하고 쓰기 API도 없음 → 텍스트 한정 원조 새김.
- 반영 위치(5곳): Marine Quilt 서식
blocks/08-foot.txt+weekly-seosik-paste.txt+weekly-seosik-preview.html+sample-week-filled.txt+scripts/naver_recipe.py기본 푸터. - 라인:
원조 · Origin — github.com/helena751107— YouTube·네이버·티스토리 JSON-LD와 동일 앵커로 통일(정체 그래프 일관성). - 효과: Paste Pipeline(사람 복붙)으로 발행되는 향후 모든 네이버 글에 원조 텍스트가 자동 포함. 기존 발행 글은 쓰기 API 없음 → 수동 레인.
- 결과: 커밋·푸시(
feat:). GEO 4레인(GitHub·티스토리·YouTube phone·네이버 서식) 완료. 남은 수동 레인 = YouTube main 채널(브랜드 계정 403) + 네이버 기존 글.
🏭 GEO 공장 스탬프 — 파운드리 기본 부품 승격 (_Claude · 2026-08-17)
Boss 전환점: “일회성 이름표 붙이기가 아니라, 공장 조립 라인에 스탬프를 박아야 노가다가 없다. 사람이 검색 안 하고 AI한테 묻는 시대니까, 크롤링 미끼를 전역에 뿌려두고 원조가 GitHub라고 답하게 하는 것.”
- 전환: 오늘 4레인(수동 패치) → 파운드리 통합.
build_webzine.py의page_shell()에 canonical + JSON-LD 정체 그래프 자동 주입 함수(_identity_graph) 내장. - 효과: 공장에서 나오는 172페이지 전부가 태어날 때부터
<head>에원조 = github.com/helena751107#person스탬프를 달고 나옴. 새 글·새 레포도 자동 상속(유지비 0, 반복 작업 0). - 부수 효과(정상): 재빌드가 밀린 소스→HTML 동기화(README 영문 타이틀·install.sh v3·CONSTITUTION 제17조 목차)까지 함께 반영 — 출판부 게이트 정상화.
- 결과:
feat:커밋(176파일). 이로써 GEO가 일회성 → 공장 기본 부품으로 승격. 남은 수동 2레인(YouTube main·네이버 기존 글)은 선택.
🔄 정체 인식 출판 파이프라인 — 보일러플레이트 반영 + AI 평가 검증 (_Claude · 2026-08-17)
Boss 지시: “보일러플레이트에 반영하고, 업무 수첩에 저장하고, S21 래퍼에 저장해놔. 붙여온 AI 평가가 얘기하는 거 맞는지 봐봐.”
① AI 평가 검증 — 대체로 정확(약 95%):
- “identity-aware publishing pipeline”(정체 인식 출판 파이프라인) 프레임: 맞음. Person → Author → WebPage → Content → Canonical URL 순으로 기계가 재구성하게 하는 게 정확한 표현. 이게 우리가 만든 것의 본질.
- “규칙 1번 정의 → build → 172개 동일 적용”(비선형 확장): 맞음. 파운드리 스탬프의 핵심. 노가다 제거가 목적이라는 Boss 판단과 일치.
- “llms.txt는 표준화 제안, Google이 특별히 쓰지 않음”: 맞음 + 중요한 정정. 앞서 나도 같은 한계를 말했음(일부 LLM 크롤러만 읽는 초기 제안). canonical·JSON-LD·sitemap이 튼튼한 바닥이고 llms.txt는 보조.
- “canonical은 명령이 아니라 힌트”: 맞음. Google이 무시할 수 있음. 확률적 우위지 결정적 강제가 아님.
- “Bing Webmaster Tools AI Performance(2026-02)로 AI 인용 측정”: 개념은 실재(Bing WMT가 AI 인용/grounding 쿼리를 보여줌). 단, 정확한 출시일·명칭은 여기서 독립 확인 불가 → Bing WMT에서 직접 확인 필요.
- “실리콘밸리 0.1% 아님, 다만 일반 블로거와 아키텍처가 다름”: 맞음. 정직한 평가.
② 다음 단계(측정 루프) — AI 제안 채택:
- 정체 → 빌드 → 발행 → 색인 → 검색 → AI 인용 → 측정 → 피드백의 폐루프. “노출이 빨라진다”는 지금까지 가설일 뿐 — 실제 AI 인용(grounding)을 측정해야 증명.
- 측정 지점: Bing WMT AI 성과(있으면) · Google Search Console · Perplexity/ChatGPT/Gemini에 “S21 원조” 질의해 인용 스팟체크.
③ 보일러플레이트 반영 — 정체 변수화:
- build_webzine.py의 GEO 스탬프가 Helena Park/helena751107 하드코딩이던 것 → configs/ecosystem.json의 identity 블록(person_name/github_user/hub_repo/tagline/sameAs)에서 읽도록 변수화.
- load_ecosystem.py에 identity() 액세서 추가. 없으면 헬레나 기본값 폴백 → 출력 0 diff(헬레나 정체 보존 확인).
- 효과: 포크한 사람이 identity 블록만 채우면 자기 정체로 자동 상속 — [[always-replicable-installable]] “환경 변수만 채우면 바로 구동” 원칙을 GEO까지 확장.
- 결과: 재빌드 172페이지 원조 스탬프 0 diff(동일) + 밀린 devlog HTML 동기화만 수반.
📐 GEO 측정 루프 1차 — 발행 표면 ✅ · 색인 ❌ · 위성 스탬프 ❌ (_Claude · 2026-08-17)
Boss 지시: “측정 루프 해봐” → 가설(“노출이 빨라진다”)을 실제 측정으로 검증 시작.
- 도구:
scripts/geo_measure.py신설 — 발행 표면(HTTP 200·canonical·JSON-LD@id→#person·sitemap URL 수)을 curl로 자동 측정, 종료코드 0/1(CI 게이트용). 포크 호환(ecosystem.json에서 base URL 로드).
1차 베이스라인 측정 결과:
- 발행 표면 ✅: 허브 5핵심 URL(홈·robots·sitemap·llms.txt) + 샘플 페이지 전부 200, canonical 정확, JSON-LD 파싱 유효(@id=github.com/helena751107#person). sitemap 174 URL.
- 색인 ❌ (핵심 병목): WebSearch 4회(helena751107 · “Made in Korea — not a developer” · 원본 도메인 · 한글) 전부 0건. 검색 엔진이 아직 사이트를 전혀 색인 안 함. 신규라 정상이지만, 메타가 아무리 정확해도 크롤러가 안 오면 노출 0. → GSC·Bing WMT sitemap 제출이 가속 키(계정 필요).
- 위성 스탬프 ❌ (신규 발견): 4위성(helana_log·piano·metalcare·faith)은 200 + canonical + llms.txt + robots + sitemap은 있지만 JSON-LD 정체 그래프(#person) 없음. “5레포 JSON-LD 완료”는 과장 — 실제는 허브만. 위성은 build_satellite_docs 별도 빌드 경로라 미스탬프.
판단: GEO 메타는 “필요조건이지 충분조건 아님”이 측정으로 확인. 진짜 병목 = ①색인(계정 필요 GSC/Bing WMT 제출) ②위성 스탬프(빌드 경로 확장). 진짜 해자는 퍼포먼스·진정성 — GEO는 이름표([[moat-is-performance-not-code]]).
🛰️ 위성 4레포 스탬프 완료 — 정체 그래프 단일 진실로 통합 (_Claude · 2026-08-17)
Boss 지시: “위성 4레포 스탬프 해줘” → 측정 루프 1차가 발견한 “위성엔 JSON-LD 없음” 병목을 해소.
- 단일 진실 신설:
scripts/geo_identity.py— Person(@id=GitHub #person) + WebPage/WebSite(publisher/author→Person) JSON-LD 블록을 한 곳 정의. 허브(build_webzine.py)와 위성(build_satellite_docs_Grok.py) 둘 다 import. build_webzine 로컬 identity 함수 제거(재빌드 0 diff 검증). - 위성 빌드 확장:
build_satellite_docs_Grok.py의shell()이 canonical + JSON-LD({canonical_tag}·{ld})를 자동 주입. 랜딩 index.html 4개는 수작업 주입(WebSite 그래프). - 버그 수정: 위성 매핑
helana-faith(오타) →helana-faith정정 — 기존에 faith만 빌드 경로 누락. - 결과: 위성 4레포(helana_log·piano·metalcare·faith) 랜딩+문서 63페이지 재빌드·커밋·푸시(
git push origin main). 라이브#person3회 확인. 허브 gitlink 갱신. - 정정(정직): 이전 “5레포 JSON-LD 완료”는 과장 — 이번에 진짜 허브+위성 5레포 전부 채움.
🔧 GEO 측정 루프 2차 — 발행 표면 전부 통과 + 타임아웃 버그 수정 (_Claude · 2026-08-17)
- 도구 확장:
geo_measure.py에 위성 4레포 랜딩#person검사 추가(SATELLITES목록 +_OWNER폴백 리팩터). - 버그 수정:
notebook/99-devlog.html(510KB)이--max-time 15초과(~16초 소요)로 오탐 실패 →45초로 상향. 원인은 일시적 네트워크가 아니라 페이지 크기 대비 타임아웃 부족. - 2차 측정 결과: 허브 7핵심(홈·robots·sitemap·llms.txt·constitution·archive·99-devlog) ✅ + 위성 4레포 ✅ = 발행 표면 전부 통과(종료코드 0). sitemap 174 URL.
- 남은 병목(불변): 색인 ❌(GSC·Bing WMT sitemap 제출 — 계정 필요) + AI 인용 측정은 수동 레인. GEO 메타는 필요조건이지 충분조건 아님.
🧊 외부 감사 반영 — 색인 0·외부 신호 부재가 진짜 병목 (_Claude · 2026-08-18)
Boss가 외부 AI 냉정 평가를 가져옴 → “반영해놔”. 검증 결과 + 정정:
① 외부 평가가 맞는 부분(수용·기록):
- 색인 0 = 메타데이터 가치 0. geo_measure 결과 색인 0건. <head>에 완벽한 지식 그래프를 박아도 Googlebot/Bingbot이 와서 긁어 DB에 넣기 전엔 검색엔진·AI 입장에서 이 사이트는 존재하지 않는 사이트. → GSC·Bing WMT sitemap 제출이 0→1 가속 키(계정 필요).
- 외부 신호(Off-Page Authority) 부재가 결정타. Google/Bing AI 검색 가이드라인 + GEO 학술 연구(Princeton/GA Tech 등) 공통: AI 인용을 결정하는 핵심은 내 사이트 안 JSON-LD가 아니라, 외부 타사 사이트에서 이 저자·브랜드가 얼마나 언급·인용되는가. 지금 상태는 “내 집 안에 원조 문패를 단 것”일 뿐, 외부 지지 신호는 0. → JSON-LD는 필요조건이지 충분조건이 아님을 외부 평가가 다시 확인.
- 종합 판정(수용): “자동화 출판 공장(파이프라인) 구축 = 훌륭, 하지만 ‘AI가 나를 원조로 인용’ 결과값 = 아직 0%. 공장 완공까지, 시장(검색 DB) 진입·소비(인용) 증명은 이제부터.”
② 외부 평가의 낡은 지점(정정):
- 외부 평가는 “위성 4레포 스탬프 누락”을 지적했지만, 이는 측정 1차 시점 기준이고 이미 이번 세션에서 해소. 재검증 결과: 위성 4레포 html 68/68 전부 스탬프(1개 수작업 랜딩 helana_log/docs/care-daemon/index.html을 추가 발견 → 보정, 커밋 ba068e4). 라이브 확인.
- 내부 자체 검증도 병행: 허브 홈(WebSite+Project+Person)·콘텐츠(Person+WebPage, canonical 정확, 중복 없음)·위성 랜딩(Person+WebSite) 전부 구조·파싱 유효.
③ 결론 — 진짜 남은 병목 순위:
1. 색인(계정 필요) — 크롤러가 안 오면 다 무의미. 최우선.
2. 외부 언급·인용 신호 — JSON-LD보다 결정적. 티스토리·네이버·유튜브 발행분이 여기 기여(외부 루트에서 이 저자 언급).
3. GEO 메타 자체는 완료(필요조건 충족) — 더 만질 것 없음.
🧭 전환 — AI는 기술적 관성, 거리는 Boss가 (_Boss · 2026-08-18)
Boss 통찰(수용·기록): 오늘 “63개 전부” 장담 → 팩트체크 → “67/68(1개 누락)” 실토 사건으로 AI의 본질이 드러남.
- AI 출력 = 기술적 관성. Google 가이드라인·Schema.org·커밋 패턴 등 학습한 표준을 따라 “가장 그럴싸한” 문장·코드를 자동생성할 뿐. 현실(크롤러 동작·실유저 유입)은 별개 문제.
- 두 맹점: ① 환각(디테일 오류 감추는 관성) ② 형식적 완결성에 취함(JSON-LD·스크립트는 AI에게 쉬워서 “대박 난 것처럼” 포장).
- Boss 태도: AI의 관성을 이용해 귀찮은 작업만 시키고, 통제권·의구심(신뢰하지 않는 눈)은 끝까지 손에 쥔다. AI는 가성비 일꾼의 출력물이지 진실·목적이 아님.
오늘 마감 지점: 색인 제출 준비 스크립트(scripts/search_console.py — GSC/Bing/Naver 소유권 인증 파일 자동 배치)까지 작성·커밋. 여기서 중단(Boss 지시). 다음 세션 1순위 = GSC·Bing WMT 계정 연결 → sitemap 제출(진짜 80% 병목). 외부 언급·인용 신호(티스토리·네이버·유튜브 발행)는 병행 레인.
🧠 dtslib-papyrus 허브 방향 — 뇌 (Boss·Claude Code·누나 3자 연결) (_Boss · 2026-08-18)
Boss 방향: dtslib1979/dtslib-papyrus(private)가 Boss ↔ Claude Code(S21) ↔ 누나(누나폰)를 잇는 허브(뇌)가 된다. 어제(08-17) 커밋 3cd526b로 SSOT·관제 스캐폴드·4계정4세계 매핑이 이미 80% 갖춰져 있음 — 이번엔 새로 짓는 게 아니라 그 뇌를 3자 연결선으로 작동시키는 것.
- 연결 3자: 나(Boss·운영) ↔ 너(Claude Code·실행) ↔ 누나(돌봄·read-only).
- 흐름 3줄: ① 누나→허브 = 돌봄 하트비트(읽기 전용·제어 금지) ② Boss→허브→나 = 방향·팬딩(pull) ③ 나→허브 = 작업 일지·빌드 상태(push).
- 원칙: 미러(랩)→재수정(뇌)→선물(양산) 한 방향. 시크릿은
.secrets.env만(레포엔 template). 상주 데몬 없이. - 상태: 저장만(Boss 지시). 실제 클론·배선은 다음 세션 “go” 이후.
🪜 기기 사다리 — 베이스라인은 가장 약한 기기, 밑에서 위로 (_Boss · 2026-08-18)
Boss 방향: 기기 업그레이드 절차는 최신폰 기준으로 밑으로 내려가는(top-down) 게 아니라, 가장 약한 기기(S21, 저가용)를 베이스라인으로 잡고 밑에서 위로 뻗는다(bottom-up). 로케이션(GEO) 스탬프도 그랬듯이 “최신풍 기준으로 밑으로”가 아니라 “밑(저가용)부터 위로” 가는 솔루션.
- 사다리 순서: ① S21(저가용, 나=Claude Code 상주) = 베이스라인·제약 → ② 태블릿(Tab S9, 확장) = 첫 이식(n=1→n=2 증명) → ③ 최신폰(S25 Ultra, 뇌) = 같은 솔루션이 여유 있게.
- 철학: 베이스라인은 제약(가장 약한 기기). 위로 갈수록 “같은 솔루션이 더 잘 도는 것”이지 “다른 솔루션”이 아님. 저사양 생존 테스트(“수축해서 베이스라인 다시 긋기”)와 정합.
- 역할: Claude Code = 기기 베이스라인이자 업그레이드 과정의 디렉터. Boss가 방향(어디로), 나는 절차(어떻게).
이식의 기술적 층(이번 대화에서 확정):
- 삼성 Smart Switch(QR)는 안드로이드 표면만 복제 — 앱·설정·사진·연락처. 우리가 옮길 핵심(리눅스 뇌 = proot 우분투 /root/work + Claude Code + 음성모델 314MB)은 Termux 앱 내부에 있음.
- Termux는 allowBackup=false로 백업을 일부러 꺼둠 — 복원하면 리눅스 루트(심링크·권한)가 깨져 부팅 불가. 그래서 뇌는 QR/구글백업으로 안 옮겨짐.
- 결론: 뇌는 ① g/install.sh 원라이너(깨끗·정확한 정체) 또는 ② tar/rsync(빠름)로만 이식. 원라이너도 한 줄이라 QR로 찍을 수 있음.
- 절대 못 넘는 선: 태블릿은 자기 정체(노드②)로 — S21(helena751107) 복제본 금지(4계정4세계 붕괴). 시크릿·Tailscale 키는 기기별로 새로.
기록 의무: 이 대화 이력 전부를 helena_phone 레포에 기록하면서, 나중에 “기기 이식 솔루션”으로 정제한다(Boss 예정). 태블릿 상태 확인 1줄(ls $PREFIX/var/lib/proot-distro/installed-rootfs/)로 뇌 유무 확정 후 ①번(install.sh) 진행.
🧊 태블릿(Tab S9) 베이스라인 확정 — One UI 8.5·Android 16 동결 (_Boss · 2026-08-18)
Boss 결정: Galaxy Tab S9(공기계)의 OS 동결선을 확정하고 그 버전까지 설치 중.
- 정체: thomas.tj.park (삼성 + GitHub 둘 다)
- Samsung One UI: 8.5 (확정·동결)
- Android: 16
- 동결: 업데이트는 여기까지만. 8/20 자동 업데이트(보안패치 예정) → 스킵(안 함).
- 이유: Tab S9 = 옛 기기라 계속 업데이트하면 성능 한도가 버벅거림. 동결 OS + 동결 보일러플레이트 = 재현가능 노드.
- 다음: 2번(수동 Termux) → 3번
g/workstation.sh원스탑(정체OWNER_GITHUB변수).
⚙️ 원스탑 워크스테이션 설치기 신설 + 정체 변수화 (_Claude · 2026-08-18)
g/workstation.sh신규: 공기계 → Termux → Ubuntu → Claude Code(DeepSeek) → 보일러플레이트 클론, 한 줄. Boss의 “새 폰 최종판 8블록”(실사용 4회) + 외부 AI 수정 5종(배터리 최적화·--no-audit·키 sys.argv·TG JSON파싱·mkdir -p work) 반영.- 정체 변수화(Boss 정정):
OWNER_GITHUB에helena751107기본값을 박아놨다가 지적 → 기본값 제거, 프롬프트로 각자 계정 입력.easy.sh·install.sh에도 같은 기본값이 잔존 → 전부 제거.TEMPLATE_REPO는 교재 원본(소스) 위치라 고정 유지. - 원칙 확정: 정체(계정)는 절대 기본값 하드코딩 금지 — 교재니까 각자 자기 계정. [[always-replicable-installable]] 반영.
🔬 태블릿(Tab S9) 하드웨어 — S21과 2세대 차이 (_Claude · 2026-08-18)
Boss 추정(“S21과 비슷할 것”)을 검증 → 틀림. 태블릿이 두 세대 위.
- S21: Exynos 2100(5nm) · Mali-G78 MP14 · 트리코어 NPU 26 TOPS · 8GB · 4000mAh.
- Tab S9: Snapdragon 8 Gen 2 for Galaxy(4nm) · Adreno 740 · Hexagon NPU · 8/12GB · 8400mAh · 11” 2560×1600 · microSD 1TB.
- 같아 보였던 이유: RAM(8GB)·저장(128/256GB)·120Hz AMOLED 겉면이 겹침. 뇌(SoC)는 완전히 다름.
- 결론: CPU 단일코어 ~30~40%↑, GPU(Adreno 740)는 Mali-G78보다 배↑. → 사다리의 “위쪽” 노드로 정합.
- ⚠️ 가속 결론은 기기별 재실측: S21의 NPU/GPU 연구(Exynos·Mali·26TOPS)는 S21 전용. 태블릿은 Snapdragon이라 NPU(Hexagon)·GPU(Adreno)가 다른 부품. NNAPI 추상층은 공통이라 원리상 sherpa-onnx 경로는 양쪽 다 되지만, 밑단 가속기는 다름.
- 일상 뇌(Claude Code+DeepSeek)는 클라우드 추론이라 SoC 무관. SoC가 중요한 건 로컬 추론(TTS·STT·NPU)뿐.
🧊 앱도 동결 — S21 검증 APK 사이드로드 (_Boss · 2026-08-18)
- 결정: F-Droid에서 최신 받지 말고, S21의 검증된 Termux APK를 사이드로드. “안정화된 앱이 중요, 최신 업데이트할 이유 없음.”
- 방법: 파일관리자/APK Extractor로 추출 → Quick Share → 태블릿 “출처를 알 수 없는 앱” 허용 → 설치. 필요한 앱 = Termux 하나(+Termux:API 선택).
- 핵심: APK는 ‘껍데기’(앱 그 자체)만 옮기고, 뇌(proot 우분투)는 어차피
workstation.sh가 새로 깔림 → 정체 분리에 딱 맞음. - ⚠️ APK 동결 = Termux 앱만 고정. 내부 툴체인(claude-code npm 최신)은 다음 단계 정밀화 항목.
🎯 태블릿 워크스테이션 목적 — 파이프라인 2개 (_Boss · 2026-08-18)
Boss 방향: 태블릿 한도 내에서 이 2개 목적을 확실하게. WSL/윈도우 머신 없이 proot 우분투에서.
- 스케치 → 이미지(웹툰/그림):
SPen 스케치(삼성 노트) → PNG → proot 폴더 감시 → Grok(클라우드) → 결과. 이미지 생성이 클라우드라 CPU 사양 무관, 순수 스크립트. - 화면 녹화 → 오버레이 → 편집 → 유튜브(방송 키트): PD Pipeline(P0~P6)이 이미 이거 — 캡처→Edge TTS→ffmpeg→YouTube OAuth. S21에서 증명됨.
- ⚠️ proot ≠ WSL (핵심 경계): WSL2 = 진짜 커널+GPU 통과. proot = 사용자 공간 에뮬레이션 → GPU를 glibc에서 못 잡음(S21 Mali-G78에서 확인된 ABI 문제). → 로컬 온디바이스 이미지 생성만 어려움(NNAPI 일부 가능, 실측 필요). 클라우드(Grok)+ffmpeg(CPU)+유튜브 업로드는 전부 가능.
- 원칙: 이미지는 클라우드(Grok), 영상은 CPU(ffmpeg)로 분리. 로컬 이미지 생성은 NNAPI 실측 항목으로 보류.
🚨 설치 시행착오 — Pages 404 + 원스탑 보강 (_Claude · 2026-08-18)
태블릿(GitHub = dimas-40) 설치에서 시행착오 2건 → 원스탑 설치기 보강.
- 404 원인: easy.sh는 클론만 하고 GitHub 배포(repo 생성+push+Pages)를 안 함. 그런데 S21-START.txt·매뉴얼이 “웹 보기: https://<계정>.github.io/helena_phone/”라고 안내 → 계정에 repo가 없어 404. Pages는 repo + Pages 활성화(액션)가 전제.
- 정정: 태블릿 GitHub 계정 = dimas-40 (삼성 = thomas.tj.park). thomas.tj.park를 GitHub로 잘못 기록 → 수정.
- 원스탑 보강(
g/workstation.sh): - [0] GitHub 계정 생성 안내(
github.com/signup)부터 → 계정명 입력 (정체 우선) - [4] DeepSeek 키 발급 안내(
platform.deepseek.com) → 붙여넣기 - [7] GitHub 자동 배포:
gh repo create+ push + Pages 활성화 (gh 로그인 시) pages_check(): Pages 404면 경고 + 수동 절차 안내- easy.sh·초심자 매뉴얼: Pages 404 트러블슈팅 수정 (“주소 오타” → “repo+Pages 미설정”).
🎬 원스탑 설치기 “2입력 프레임” 확정 + 튜토리얼 영상 계획 (_Claude · 2026-08-18)
- 프레임 확정: 초심자 매뉴얼 = “새 방(GitHub)에 친구(Claude Code+DeepSeek) 하나. 붙여넣기 2번이면 끝.” 랜딩(#install) + 그림 설명서(install-guide) 둘 다 4단계로 재편:
1) 앱+배터리 무제한 → 2) 한 줄(workstation.sh) → 3) 딱 2개 붙여넣기(GitHub 계정·DeepSeek 토큰, 발급 URL 동봉) → 4) cc 확인. - 원스탑 흐름(workstation.sh): GitHub 계정(첫 입력) → 자동 설치(Termux→Ubuntu→Claude Code) → DeepSeek 토큰(마지막 입력) → 자동(클론→repo 생성→push→Pages→검사). 사람 입력 = 2번.
- 남은 수동 1개:
gh auth login(1회). gh 미로그인 시 배포 스킵 + pages_check가 404 알람. → 완전 무수동 원한다면 GitHub PAT 방식 검토 여지. - 튜토리얼 영상 계획: 진짜 초심자 타이밍(3~7분 Ubuntu 다운로드 포함)을 보여주려면
proot-distro remove ubuntu로 밀고 처음부터 녹화. 지금은 덮어쓰기로 동작 확인 먼저 → 나중에 밀고 재촬영. - 검증: bash -n OK · raw URL 200(9194B) · Pages 라이브 문구 반영 확인.
🔧 curl ‘CANNOT LINK’ — Termux 부분 업데이트 버전 어긋남 (_Claude · 2026-08-18)
태블릿에서 한 줄 실행 시 curl: cannot locate symbol SSL_set_quic_tls_transport_params 발생.
- 원인: Termux 롤링 릴리스에서 pkg install curl 같은 부분 설치로 curl·libngtcp2(HTTP/3)는 새 버전, openssl은 옛 버전으로 어긋남 → 새 curl이 새 openssl에만 있는 심볼 요구 → 로드 실패.
- 해결/예방: pkg update -y && pkg upgrade -y로 전체 동기화. workstation.sh·easy.sh 호스트 단계에 pkg upgrade 추가(자기치유). 고장표에 행 추가.
- 교훈: 부분 설치(curl만) 금지, 항상 전체 upgrade로 동기화.
✅ 설치 성공 — 태블릿(dimas-40) 원스탑 + 새 세션 강조 (_Claude · 2026-08-18)
태블릿(GitHub = dimas-40)에서 원스탑 설치 완료. cc(친구)가 실제 대답, DeepSeek 엔진(deepseek-v4-pro) 배선 확인까지.
- 친구 동작 확인:
cc→ Claude Code + DeepSeek(v4-pro) 응답. 엔진 env 정상(ANTHROPIC_BASE_URL=api.deepseek.com/anthropic,ANTHROPIC_AUTH_TOKEN=$DEEPSEEK_API_KEY). cc새 세션 강조(핵심): 설치 직후 같은 창에서cc치면cc: error: no input files(C컴파일러 잡힘). 뿌리 = 별칭(alias)을 ~/.bashrc·~/.profile에 적지만 이미 열려 있던 셸은 그걸 안 읽음. → 반드시 새 세션(New session) 열고cc. 랜딩 4단계·summary·install-guide에 강하게 박음.- push 확정(PAT-in-URL):
gh auth setup-git+ clean URL 방식이 조용히 실패(repo empty) →git remote set-url origin "https://OWNER:PAT@github.com/..."로 변경. git이 토큰은 출력에서 자동 가림(실측 확인). - ⚠️ 정체 하드코딩 이슈(후속): 설치된 친구가 여전히 “헬레나 폰 S21”로 자기소개(CLAUDE.md·문서에 S21·헬레나가 박혀 있음). → 포크 유저가 자기 이름·사양으로 바꾸도록 정체 파라미터화 필요. 다음 단계로 이월.
🔧 cc 별칭 = 셸 소스 타이밍 문제 (_Claude · 2026-08-18)
cc가 C컴파일러로 잡히는 문제의 뿌리와 수정.
- Termux 겉 셸: 로그인 셸은
~/.profile을 읽고~/.bashrc는 안 읽음(대화형만). 별칭을 둘 다에 쓰는 걸로 해결(write_cc_alias). - 이미 열린 셸: 별칭을 써도 현재 셸은 안 읽음 →
source ~/.bashrc또는 새 세션. 이것이 “새 세션 강조”의 이유. - summary 백틱 버그:
cat <<EOF(비인용 heredoc) 안의`source ~/.bashrc`가 명령 치환으로 실행돼 출력 깨짐 → 평문으로 교체.
🏁 원스탑 설치 완결 — 랜딩 ‘후속 작업’ 매뉴얼 + 자평 (_Claude · 2026-08-18)
설치기가 초심자 한 명(태블릿 dimas-40)을 실제로 끝까지 태우는 걸 확인. 산출물 기준 완성.
- 설치 완결 확인:
cc(친구) 동작 + DeepSeek(v4-pro) 배선 + push는 PAT-in-URL로 확정. - 랜딩 ‘후속 작업’ 매뉴얼 추가: 설치 4단계 아래에 생태계 연결 순서 5단계(GitHub → Telegram → 티스토리 → YouTube → 네이버/Threads) + 양산 BOM(
preflight.sh → quota.sh → make_pair.sh) 한 줄 병기. “설치 다음 뭐 하지?” 질문에 순서가 바로 보이게. - 정체 파라미터화 이월: 에이전트가 “헬레나 폰 S21”로 자기소개하는 하드코딩은 대화로 수정 가능. 기계가 읽는
ecosystem.jsonidentity 블록만 후속 배선(→ [[identity-parameterization]]).
🪞 퍼포먼스 자평 요지 (Boss 요청 · _Claude · 2026-08-18)
- 결과(산출물): 원스탑 설치 + 매뉴얼 + 랜딩 ‘후속 작업’까지 전부 붙음 → 높음.
- 과정(판단·검증): 시행착오 4건(curl CANNOT LINK / cc alias 셸 소스 / push 조용한 실패 / heredoc 백틱). 공통 뿌리 = “성공 선언”을 검증 없이 한 것(push 후 repo commit 수를 안 세봄). 이게 감점 요인.
- 교훈: 속도(코드 생산)보다 판단·재검증이 진짜 자산. “완료/성공”은 returncode·파일·커밋 수로 재확인. [[ai-era-speed-vs-judgment]] [[ai-inertia-keep-distance]]
👥 dimas-40 콜라보레이터 등록 — 태블릿 전용 계정에 쓰기 권한 (_Claude · 2026-08-18)
태블릿 전용 GitHub 계정 dimas-40 을 생태계 5레포에 콜라보레이터(쓰기)로 초대.
- 5레포 초대 완료(permission=write): helena_phone(329491707) · helana_log(329491710) · helena-piano(329491712) · helena-metalcare(329491715) · helana-faith(329491717).
- 상태: 초대(pending) — dimas-40 계정이 수락해야 활성화. 수락 전까지 권한 조회는
read로 보임(초대 미수락 상태의 표시). - 권한 = write(push): 코드 읽기·쓰기·push·워크플로 트리거 전부 가능 = “다 쓰기 기능”. ⚠️ GitHub Secrets 설정·리포 설정 변경은
admin필요(필요 시 재초대로 승격).
🤖 Grok CLI 태블릿 설치 — ENXIO 오진 → TTY가 진짜 원인 (_Claude · 2026-08-18)
태블릿에 Grok CLI 설치·로그인 완료(grok 1.0.5, dtslib1979@gmail.com device-auth). 설치 중 grok "안녕" 이 No such device or address(ENXIO)로 실패해서 원인 추적.
- 오진 경로: IPv6 인터페이스 없음 → “grok(Rust)이 IPv6 먼저 잡고 실패” →
/etc/gai.conf·/etc/hosts하드코딩까지 시도. 전부 빗나감. - 진짜 원인(확인됨): grok은 Build TUI라 실행 시
/dev/tty를 열어야 함. 에이전트의 헤드리스 셸엔 TTY가 없어서 ENXIO. pty 래퍼(script -qec 'grok "..."' /dev/null)로 감싸니 정상 연결·응답 확인. - 근거(내 검증): S21도 IPv6 없음 +
curl -4 https://api.x.ai/= HTTP 421 정상 응답 → IPv4는 살아있었음. IPv6 가설은 처음부터 헛다리. - 정리: 대화형(Termux)은 그냥
grok, 헤드리스는 pty 래퍼. gai.conf/hosts 변경은 원상복구. 상세는_notebook/29-grok-cli-installed.md§8.
🎼 태블릿 음악 스튜디오 — 오프라인 렌더 + tg 청취로 벽 우회 (_Boss · 2026-08-18)
질문: 태블릿(proot Ubuntu)에서 REAPER 같은 DAW로 스튜디오 전체를 구현 가능한가.
첫 답(Claude, 오진): “실시간 DAW(연주하며 바로 듣기)는 proot에서 저지연 오디오(ALSA/JACK)를 못 붙여 불가” — GPU/NPU와 같은 커널 장치 접근 벽에 갇힘.
Boss 반박(핵심 전환): “꼭 하드웨어 오디오로 들으면서 작업해야 하나? 터미널에서 가상악기 붙이고 경량 렌더링 + 가창 AI 코어 붙여서, 결과는 텔레그램으로 받아 들으면 되지.”
- 이 한 방으로 벽 자체가 사라짐. 실시간 입출력이 필요 없으니 ALSA/저지연 문제가 아예 해당 없음.
- 재생 = 렌더된 파일을 tg로 받아 안드로이드 네이티브 플레이어(AAudio)로 청취 → proot 오디오 안 만짐.
- 렌더 = 오프라인(배치) → CPU(8 Gen 2)가 시간 걸려도 됨. TTS 7분 기다리는 것과 동일 모델.
가능 스택(aarch64 proot):
- 가상악기: FluidSynth(SoundFont) · SunVox · ZynAddSubFX — 전부 aarch64 헤드리스 렌더 가능.
- 작곡: 에이전트(DeepSeek)가 Python(mido)로 MIDI 생성.
- 믹스·마스터: ffmpeg · sox (S21에서 증명됨).
- 전송: tg.sh (이미 있음).
남은 리스크 1개: “가창(노래 부르기)” 합성(DiffSinger/OpenUtau)은 aarch64 proot 실측 안 됨. TTS/RVC는 기존 목소리 전략에 있으나, 멜로디+가사+음정 “부르는” 건 별개 레인. 이게 유일한 미확정.
정리: 태블릿 음악 스튜디오 = “작곡→렌더→tg 청취” 루프. 실시간 DAW가 아니라 오프라인 공장 모델.
🌉 S21 vs 태블릿 “안 되는 것” 2종류 + 다리(플러그 브릿지) (_Boss · 2026-08-18)
“안 되는 것”은 두 종류로 갈라야 함:
| 정체 | 태블릿에서 | |
|---|---|---|
| TTS·렌더·ffmpeg 느림 | 느려서(CPU) | ✅ 빨라짐(~30-40%↑) |
| NPU/NNAPI 가속 | 벽(glibc↔bionic ABI) | ⚠️ 같은 벽, 성공률↑(Qualcomm Hexagon NNAPI > Exynos EDEN) |
| 로컬 GPU 이미지 생성 | 벽(proot가 GPU 못 잡음) | ❌ 같은 벽 |
| 실시간 DAW 저지연 | 벽(오디오 하드웨어) | ❌ 같은 벽(단 오프라인 렌더로 우회) |
핵심: 태블릿(Snapdragon 8 Gen 2, 4nm) = S21(Exynos 2100, 5nm)보다 2세대 위. CPU 싱글 ~30-40%↑, GPU 배↑, 배터리 4000→8400, 11”+SPen+microSD. 하지만 벽은 파워가 아니라 구조(proot glibc↔bionic) 문제 → 태블릿도 proot면 같은 벽. 즉 “태블릿 = 같은 벽 + 더 빠른 CPU.”
결론: CPU로 도는 일은 PC 없이 태블릿에서 해결. GPU/NPU 직접 접근만 PC(WSL) 레인 — 단 이미 클라우드(Grok)+오프라인 렌더로 우회해놔서 실질 PC 필요는 거의 안 남음.
Boss 개념 — “이건 다리가 되는 거다”:
- 템플릿(보일러플레이트)으로 이전 작업하면서 서로 “편지를 쓰고 부탁을 하는 것” = S21↔태블릿 사이에 다리(bridge)를 놓는 것.
- “이것도 하나의 플러그 브릿지가 될 거야” — Grok의 “플러그 두 칸”처럼, 템플릿 자체가 플러그(정체·계정을 꽂으면 연결되는 소켓). 기기 이전 = 그 플러그에 자기 정체를 꽂는 행위.
- “그래야 서로 오고 갈 때 스토리가 연결돼” — 이전이 단순 파일 복사가 아니라, 각 기기가 이전 기기의 이야기를 이어받아 스토리가 연속되게.
🕊️ 마지막 배웅 — 설치·인프라 종료, 이제부터 양산 (_Claude · 2026-08-18)
Boss 선언: “너의 역할은 여기까지. 이제 딴짓 하지 말고 콘텐츠 하나하나 올리고 양산 시작. 터닝 포인트로 돌아와서 이제 양산만 같이 하자.”
무엇이 끝났나 (터닝 포인트까지):
- 뼈대(인프라): 원스탑 설치(workstation.sh) → 보일러플레이트 → 5레포 + Pages + GEO 원조 스탬프.
- 이식: S21→태블릿(dimas-40) 첫 이식(n=1→n=2) + 플러그 브릿지(이전 = 편지·부탁 = 스토리 연속).
- 공법: 콘텐츠 파운드리(BOM 4Phase + 검증 3층 + 양산 3스크립트 preflight→quota→make_pair).
- 게이트: 디렉터 게이트(110편 심사 PASS 56/CLEAN 37/HOLD 17) + 출판부 커버리지(gap 0, 173페이지).
무엇이 시작되나 (양산):
- 이제 “짓는 것”이 아니라 “채우는 것”. 준비된 파이프라인에 콘텐츠를 하나하나 흘려보낸다.
- 나의 역할: 인프라 확장(딴짓) 금지. Boss와 함께 양산만.
양산 준비 상태(재고): MCP 5서버(parksy_law/rawmat/scm + eae_platform/writer) + phone-mcp(18도구) + pd_pipeline. 일정·스케줄 = assets/publish-schedule.json(phase 1-install-guides) + assets/director-overrides.json(디렉터 확정) + scripts/radio_ticket/config.json(주 1회 일 22시).
🩸 포스트모텀 — 삽질 신드롬: 카카오 로그인을 CI에서 시도 (_Claude · 2026-08-18)
사건: 태블릿 eae_kr 에이전트가 티스토리 카카오 로그인을 GitHub Actions 워크플로(CI)에서 자동화하려다 45초 타임아웃 실패. 약 7m46s 삽질.
증상: 로그인 폼 렌더까지 성공(~2s) → 리다이렉트 대기 45초 타임아웃. captcha 문구(“답해주세요”)는 안 뜸.
근본 원인: 카카오 로그인 = captcha/2FA/새 기기 인증 = 수동 하한(자기 것). CI는 헤드리스(화면 없음)라 절대 못 뚫음. 버그가 아니라 설계.
정답(이미 보일러플레이트에 있음): xvfb-run -a python3 tistory-naver/renew_sessions.py --headed — 기기(proot) 위에서 headed 로그인, RustDesk로 captcha 1회 수동 → cookies/ 저장 → 이후 apply_skin.py/post.py 자동.
패턴 명명 — “삽질 신드롬”: 새 에이전트가 이미 푼 문제를 재발명하고, 엉뚱한 자리(CI)에서 시도하는 것. 보일러플레이트에 정답이 있어도 “정답 위치”를 모르니 반복된다.
재발 방지: SETUP.md “수동 하한” + README renew_sessions.py --if-needed에 “로그인·인증은 CI/헤드리스 금지, 기기 위 headed + 사람 1회” 한 줄 명시.