FIELD NOTES / KEEP WHAT WORKS

한 번의 해결을, 다음 작업의 시작으로.

개발과 AI 협업에서 배운 판단 기준과 시행착오를 모았습니다. 원문은 당시의 기록으로 보존하고, 현재 운영 설명과 구분해 읽습니다.

내용 확인 · 운영 문서 기준

MINUS BETA / WORKING SYSTEMSolve. Write. Reuse.
  1. 01문제와 원인 남기기
  2. 02다시 쓸 수 있는 해법 정리
  3. 03적용 전에 현재 환경 확인

01 / KEEP THE CONTEXT

기록을 읽는 세 가지 기준.

01

그때의 조건

작성일과 당시 도구 구성을 함께 봅니다. 과거의 역할 이름이나 절차가 지금도 유효하다고 가정하지 않습니다.

02

재사용할 원리

특정 명령보다 왜 그 방법이 필요했는지를 찾습니다. 현재 프로젝트에 맞는 부분만 적용합니다.

03

검증할 결과

해법을 적용한 뒤에는 원래 문제가 해결됐는지 다시 확인합니다. 같은 증상도 원인은 달라질 수 있습니다.

02 / SEARCH THE ARCHIVE

필요할 때 다시 꺼내보기.

99개의 원문 · 가장 최근 기록 2026-10-13
페이지 정리일과 원문 작성일은 서로 다릅니다.

전체 99건

네 번 고쳐도 안 되던 버그가 다섯 번째에 한 줄로 끝난 이유 — 테스트는 초록인데 운영은 빨간 날

텔레그램 /clear 브릿지가 하루 동안 네 번 수정되고도 운영에서 계속 실패했다. 네 번 모두 실제 결함을 고쳤지만 시험용 Codex를 읽기 전용으로 띄워 운영 머리글의 permissions 줄이 보이지 않았다. 다섯 번째는 운영 로그의 단계 코드와 화면 캡처에서 출발해 한 줄을 허용했고, 운영과 같은 설정으로 실패를 먼저 재현한 뒤 36분 만에 사용자의 /clear가 두 기기에서 완료됐다. 테스트 초록·운영 빨강일 때 환경 차이부터 찾는 규칙 일곱 가지.

내용 읽기 ↗

베리와 사람의 3분 통화 — 듣기·침묵·종료·전달에서 배운 것

약 3분 7초 녹음이 남은 사람 통화에서 말 끊기, 5초 침묵 요청, 종료 의사 처리가 문제로 드러났다. 익명화한 대화 흐름과 3.474~19.763초의 로컬 응답 지연, 통화 기록 전달 누락 원인, 적용한 재발 방지와 아직 확인하지 못한 결과를 구분해 남긴다.

내용 읽기 ↗

전화 AI 베리, 처음으로 상대와 말을 주고받다 — 이틀의 무음을 하루 만에 뚫은 기록

맥에 붙인 아이폰 회선으로 AI 비서가 전화를 걸어 상대 봇과 질문·답변을 주고받은 첫 통화. 화면 조작 손을 컴퓨터 사용 도구에서 접근성 API 헬퍼로 바꿔 1.2초를 0.1초로, 통화 중 답변 모델을 Haiku로, 단일 턴을 턴 루프로 바꿨다. 알림 센터 통화창·전화 앱·권한 컨텍스트의 함정과 상대 말끝 기준 실측 숫자를 남겼다.

내용 읽기 ↗

회원정보 저장이 「닉네임 중복 확인」에 막힐 때 — 고장 난 검사를 건너뛰면 빠진 항목이 지워진다

한 통신사 사이트 회원정보 변경에서 마케팅 동의만 바꿔도 「닉네임 중복 확인」 경고로 저장이 막혔다. 페이지 코드를 읽어 보니 저장 함수가 화면에 없는 칸을 비교했고, 중복확인 버튼이 부르는 함수도 페이지에 없었다. 확인 표시를 켜고 저장 함수를 다시 불러 해결했지만, 저장 양식에 닉네임이 빠져 있어 닉네임이 빈 값으로 덮였다. 저장 직후 안 바꾼 항목까지 확인하고 원래 값을 넣어 다시 저장해 복구했다.

내용 읽기 ↗

chezmoi로 4대의 공통 설정만 관리하기

Mac 두 대와 WSL 두 곳에 승인된 훅 하나의 부분 관리를 도입했다. 복사본 시험, 기존 등록기와의 소유권 조정, 무변경 재적용, 원복과 충돌 거부, 60초 주기 검사와 수동 수정의 경계를 정리했다. 실제 질문 왕복과 사용자 알림 확인은 별도 검증으로 남겼다.

내용 읽기 ↗

전화 AI를 검증하는 법 — 내 컴퓨터의 소리에서 상대의 답변까지

로컬 파형과 일반전화 상대 수신은 다르다. Apple 실시간 말하기로 세제 질문의 응답을 확인한 조건, 공개 구현을 읽는 기준, JEV·Fable의 역할과 수동 재생 지연, 아직 검증하지 못한 모델 대화 왕복을 정리했다.

내용 읽기 ↗

AI 작업 장부를 가볍게 운영하는 법

열린 티켓 11개가 약 77KB의 장부로 커지면서 현재 잔여를 찾기 어려워졌다. 결과물당 티켓 하나, 잔여·대기 종류·다음 행동의 짧은 조회, 이전 요약의 이력 보존을 기존 도구에 적용한 과정과 검증 범위를 정리했다.

내용 읽기 ↗

Fastlane으로 앱 등록하기 — 문자 2FA까지 기존 Mac 환경에서 처리한 기록

Fastlane을 쉬운 말로 설명하고, 배포용 Mac과 문자 수신 Mac을 연결해 Apple 로그인·앱 등록을 처리한 과정을 정리했다. 새 문자만 읽는 기준, 비공개 코드 전달, service key 오류와 팀 선택, 업로드·심사·설치의 확인 단계를 담았다.

내용 읽기 ↗

자비스 제작기 3 — 네스트로 시작하고, Mac으로 받아쓰고, 텔레그램에서 확인하기

보이스 스타토로 시작하는 단계별 음성 입력과 시고토 오와리의 확인형 종료를 연결했다. 새 대화 첫 입력 누락, 카드 누락, /clear 이후 출처 미확인을 각각 고치고 실제 표시까지 확인한 기록.

내용 읽기 ↗

자비스 제작기 2 — 호출 누락, 종료 확인, 원격 전원 켜기를 실사용으로 다듬기

영어 Jarvis 호출 누락과 짧은 음성 보정, 종료 확인·취소 오인식, 상태등, 빠른 시작으로 달라진 WOL을 실사용으로 다듬었다. 코드 통과·실제 재생·사용자 확인을 분리하고 v1.1.0 릴리스와 연결한다.

내용 읽기 ↗

자비스 제작기 — Mac에 말 걸고 네스트에서 답을 듣기까지

Mac 내장 마이크·로컬 인식·Cursor·Google Nest를 연결해 실제 호출과 1회 청취까지 확인했다. 39.07초를 구간별로 나누고, 재생 중 재호출 방지와 원형 실측·공개판 검증을 구분하는 기준을 정리했다.

내용 읽기 ↗

Jev 도입기: AI에게 맡길 판단과 무료 규칙으로 충분한 일

실행 전 보조 판단과 실행 후 보고 배지에는 Jev를 적용하고, 파일·로그 사전 선별에는 비교 실험에서 같은 결과를 낸 무료 규칙을 선택했다. 한국어 보고 16건 중 오분류 1건과 무료 규칙의 표본 입력 61.5% 감소를 구분해 기록하며, 모델 판단을 실행 승인·작업 종결로 바꾸지 않는 경계를 남긴다.

내용 읽기 ↗

브릿지를 재시작할 때 작업 세션까지 죽이지 않는다 — 운반 프로세스와 실행 프로세스를 분리한다

메시지 운반 브릿지의 설정 반영과 대화형 작업 세션 초기화는 서로 다른 작업이다. 큐와 현재 턴이 끝난 뒤 브릿지 서비스만 교체하고, 새 브릿지 PID·worker 상태·실행 환경은 바뀌되 tmux 안의 Cursor·Codex 세션 PID는 유지됐는지 확인하면 문맥 유실 없이 복구할 수 있다.

내용 읽기 ↗

설정 파일을 고쳤다고 서비스가 바뀐 건 아니다 — plist·실행 환경·시작 시각을 함께 본다

LaunchAgent 설정을 수정했어도 재시작 누락이나 뒤이은 설치 작업의 덮어쓰기로 실행 프로세스는 다른 값을 들 수 있다. 완료 판정은 plist의 디스크 값, 현재 PID의 실제 환경변수, 프로세스 시작 시각을 함께 대조해야 하며 세 층이 어긋난 위치가 곧 원인 범위다.

내용 읽기 ↗

스토어 콘솔의 completed는 공개 완료가 아니다 — 트랙 상태와 사용자 URL을 따로 검증한다

Google Play production 릴리스가 completed여도 지역별 전파나 공개 노출이 끝나지 않아 상세 URL은 404일 수 있다. 업로드·심사·트랙 반영·공개 페이지를 서로 다른 단계로 기록하고, 목표 versionCode의 콘솔 상태와 로그인 없는 사용자 URL이 모두 맞을 때만 공개 출시로 닫아야 한다.

내용 읽기 ↗

실기기 테스트 전에 설치 출처부터 본다 — debug 덮어쓰기가 사용자 데이터를 지울 수 있다

스토어 설치본 위에 같은 applicationId의 debug APK를 올리면 서명 불일치가 나고, 자동 uninstall fallback은 실제 사용자 데이터를 함께 지울 수 있다. 설치 전에 installer·versionCode·서명 조건을 확인하고 같은 release 서명, 테스트용 applicationId, 전용 기기 중 하나를 선택해야 한다.

내용 읽기 ↗

코드가 안 바뀐 작업도 검증 영수증을 남긴다 — 관측값·기대값·파일 해시의 최소 계약

설정 변경·서비스 재시작·콘솔 상태 확인처럼 코드 diff가 없는 작업도 산문 보고만으로 닫으면 재검산할 수 없다. 실제 도구 관측을 JSON으로 남기고 완료 조건의 기대값, 측정 방법, 시각, 관측 파일 SHA-256을 별도 영수증에 묶으면 비코드 작업도 기계적으로 검증할 수 있다.

내용 읽기 ↗

배포 워크플로우가 빨간데 사이트는 갱신돼 있다 — 판정은 색이 아니라 라이브 아티팩트로

deploy 단계가 반영 확인 폴링 타임아웃으로 빨갛게 죽어도 사이트는 몇 분 뒤 갱신돼 있을 수 있다. 워크플로우 색은 계기판이지 배포 사실이 아니다. 판정은 해시 박힌 라이브 번들·본문 마커를 N회 연속 fetch 로 하고, 복수 리포지토리 동시 증상이면 플랫폼 장애부터 의심한다.

내용 읽기 ↗

신원 없는 git commit은 어떤 기계에선 되고 어떤 기계에선 rc=128 — 픽스처의 숨은 노드 의존

user.email 미설정 시 git은 사용자명@호스트명으로 신원을 지어내는데 macOS는 성공하고 일부 리눅스는 rc=128로 죽는다. 픽스처를 만든 노드에서만 초록인 숨은 노드 의존이 생긴다. 픽스처 커밋마다 -c 로 신원을 명시하고 격리 축에는 useConfigOnly 를 깔아 모든 노드가 같은 시험을 치게 한다.

내용 읽기 ↗

해시만 다른 URL로 goto하면 페이지는 다시 뜨지 않는다 — 이전 화면을 새 부트 결과로 오인한다

해시(#)만 다른 URL 로의 goto 는 문서를 다시 로드하지 않아, 검증 스크립트가 이전 화면을 새 화면의 부트 결과로 찍어 '라우팅 파손' 오보를 낸다. 탐침 사이에 about:blank 리셋을 넣고, 판정 근거는 URL·타이틀이 아니라 그 화면에만 있는 렌더 마커·스크린샷으로 삼는다.

내용 읽기 ↗

macOS 빨강을 "OS 탓"으로 적기 전에 — bash 3.2는 source 실패가 || true를 뚫는다

macOS 기본 bash 3.2에서는 source 실패가 || true 가드를 무시하고 스크립트를 즉사시킨다. 같은 관용구가 리포지토리 13곳에 깔려 'macOS라서 실패'라는 오진을 낳았다. 선택적 source는 존재 확인을 앞에 두고, 보고서에는 OS 이름 대신 결함 항목의 이름을 적어야 전수 수리가 가능해진다.

내용 읽기 ↗

macOS iconv는 1KB를 넘으면 멀쩡한 UTF-8에도 실패를 돌려준다 — 유효성 판정기로 쓰지 마라

BSD iconv 는 입력이 약 1024바이트를 넘으면 유효한 UTF-8 에도 rc=1 을 낼 수 있어, 작은 픽스처로는 영원히 안 보이다가 실전 입력에서 터진다. iconv 종료코드를 유효성 정본으로 쓰지 말고 iconv -c 출력 대조나 python3 디코더를 쓰며, 픽스처에 경계보다 큰 케이스를 포함한다.

내용 읽기 ↗

"30분 뒤에 꺼줘"는 세션이 아니라 OS에 맡긴다 — 지연 실행용 durable 스케줄러

채팅 세션 안의 sleep 타이머로 지연 실행을 맡기면 세션 정리·재부팅·컨텍스트 재시작과 함께 예약이 조용히 사라진다. 미래 시점의 가전 제어·발송 같은 행동은 launchd나 systemd-run 같은 OS 레벨 일회성 타이머에 박고, 예약·발사 알림과 발사 직전 상태 확인까지 남겨야 한다.

내용 읽기 ↗

같은 일을 두 곳에 시키면 두 번 한다 — 착수 전 claim 게이트로 중복 실행을 막는다

작업 배정 단계에 잠금이 있어도 실제 착수 지점이 열려 있으면 같은 작업을 두 주체가 동시에 실행할 수 있다. 빌드·업로드·발송처럼 되돌리기 어려운 일은 착수 직전에 작업ID 기준 claim/lease를 잡고, 모든 주체가 공유하는 직렬화 지점과 wrapper 게이트로 중복 실행을 코드가 막아야 한다.

내용 읽기 ↗

detached HEAD에서 자동으로 커밋하면 push가 조용히 실패한다 — 커밋 전 브랜치 앵커를 단언한다

자동 커밋이 detached HEAD 위에서 성공하면 커밋은 생기지만 브랜치에 붙지 않아 push가 조용히 실패한다. 커밋 직전에 symbolic-ref로 목표 브랜치 앵커를 단언하고, 같은 저장소 쓰기는 flock으로 직렬화하며, detached 상태를 일부러 만든 회귀 테스트로 예방 게이트를 굳힌다.

내용 읽기 ↗

물리 노드와 논리 AI 노드는 분리해서 적는다 — 5대/10노드 표준화와 생성 SoT 갱신

AI 작업망에서 '노드'라는 말을 물리 기기, 논리 AI 주체, 텔레그램 폴러에 섞어 쓰면 5노드·9노드·10노드가 금방 뒤엉킨다. 숫자는 물리 5대 / 논리 10노드(Claude 5 + Codex 5)처럼 단위를 붙이고, 역할은 Codex 실행 레인 / Claude 리뷰·게이트 레인으로 적는다. 작업 기록에는 구현·리뷰 주체를 남기고, 공개 JSON 같은 생성본은 원본 헤더까지 같이 고쳐야 다음 생성 때 되돌아가지 않는다.

내용 읽기 ↗

세션이 끊겼다 돌아오면 했던 일을 다시 한다 — STALE 앵커와 멱등성 스텝 레저

자동화 에이전트에게 멀티스텝 작업(빌드→업로드→스샷→출시)을 맡겼더니 세션이 API 정지로 끊겼다 살아나며 끝낸 일을 처음부터 다시 했다. 원인은 멍청함이 아니라 멱등성 부재 — 재시작 세션은 prose 로 컨텍스트를 복원하는데 글은 sub-step 완료를 기계-체크 가능하게 담지 못한다. 처방은 완료를 글이 아닌 장부(ledger)에 적고 비싼 스텝 실행 전 장부에 묻기, 위임엔 끝난 것/남은 것 STALE 앵커 못박기, 강제 훅은 observe-canary 로.

내용 읽기 ↗

실행하기 전에 확인한다 (verify-before-execute) — AI에게 일을 시킬 때 짐작이 비싼 이유

AI에게 일을 맡길 때 사고를 막는 건 똑똑함이 아니라 실행 전 한 번 더 확인하는 규율이다. 비가역 작업은 짐작으로 지르지 않고 대상을 확정하고, 메모리보다 코드를 실측하고, 가짜처럼 생긴 진짜 앞에선 멈추되 권위 있는 정정엔 즉시 수용한다. 하룻밤 세 사고에서 뽑은 실행 전 체크리스트.

내용 읽기 ↗

graphify AST tier 도입과 공유 globals 오염 사고에서 배운 것 — 정책보다 차단 훅이 막는다

코드베이스를 AST 그래프로 인덱싱해 AI 가 원본을 안 읽고 질의→토큰 대폭 절감(무료 AST tier). 그런데 설치 서브커맨드가 ~/.claude(=claude-skills 심링크, 5노드 공유) 의 globals 글로벌룰을 오염시켜 어제·오늘 2회 재발. 교훈 — (1) 안1 결정 후에도 다른 노드서 재발했듯 정책만으론 안 막힌다, 차단 훅(forcing function) 필요 (2) 공유 심링크 SoT 를 install 이 건드리는 구조는 도입 전 1회 점검 (3) auto-use 같은 좋은 설계도 노드 세션 home cwd 제약에 막혀 수동 운용으로 후퇴 (4) 차단 훅은 명령 실행뿐 아니라 텍스트 인용까지 over-match 하니 전달 텍스트 sanitize 필요.

내용 읽기 ↗

노드 세션 생존확인은 RUNNING/ABSENT/UNREACHABLE 3-상태로 — '못 찾음'을 '꺼짐'으로 단정하지 말 것

ssh <node> 'tmux has-session' 같은 bare 명령으로 노드 생존을 확인하면 비대화형 ssh PATH 에 바이너리(/opt/homebrew/bin)가 없어 command-not-found → 세션이 살아있어도 '꺼짐'으로 false-negative. 정답은 RUNNING/ABSENT/UNREACHABLE 3-상태로 갈라 '바이너리 못 찾음/ssh 실패'를 ABSENT 아닌 UNREACHABLE 로 분리하고, PATH 를 명령 앞에 강제 prepend 해 not-found 자체를 차단. 룰(풀패스 기억)로 3번 깨진 뒤 코드 forcing function 으로 박음.

내용 읽기 ↗

self-orchestration에서 "자기 자신(home)" 타겟은 SSH·텔레그램 왕복이 불필요 — 로컬 tmux inject가 정석

여러 기기를 오케스트레이션하는 디스패처에서 허브(본진) 자신을 타겟으로 라우팅할 때 노드→허브용 SSH 주입 스크립트를 재사용하면 self-target 가드로 rc=4 abort. 정답은 home만 분기해 SSH 없이 로컬 tmux inject. 자기 자신에게 보내는 명령은 네트워크를 한 바퀴 돌 이유가 없다.

내용 읽기 ↗

telegram MCP 가 bun 을 못 찾아 끊길 때 — bun 을 /opt/homebrew/bin 에 심링크로 근본 차단

telegram plugin 은 bun 으로 spawn 되는데 bun 이 ~/.bun/bin 에만 있어 PATH 못 찾으면 끊긴다(3회 재발). plist PATH fix 는 정규 기동 경로만 막아 새는 경로가 계속 생김. 근본 차단 = bun 을 /opt/homebrew/bin 에 심링크 — homebrew prefix 라 어떤 재기동 경로든 PATH 에 있어 경로 무관 차단. 재발 시 ls -la /opt/homebrew/bin/bun 부터 확인.

내용 읽기 ↗

WSL mirrored 전환 후 SSH 가 끊길 때 — Windows OpenSSH 가 :22 를 선점하는 충돌

WSL2 를 mirrored 로 바꾸고 wsl --shutdown 한 뒤 WSL sshd 가 안 떠 ssh refused(timeout 아님=호스트는 살아있음). 원인=mirrored 가 네임스페이스를 Windows 와 공유하는데 호스트 Windows OpenSSH 가 이미 :22 선점→WSL ssh.socket Address already in use. 해결=관리자 PowerShell 로 Windows sshd stop+disable→WSL 이 :22 잡음. 전환 전 tasklist|findstr sshd 로 미리 확인하면 재발 0.

내용 읽기 ↗

작업 분배 전 의미기반 staleness 게이트 — 끝난 결정이 죽인 형제 task 도 닫아라

자동 분배에서 가장 비싼 사고는 끝난 결정이 무효화한 task 재발사. 결정 시 완료 task 만 닫지 말고 형제 task 도 닫고, dispatch 전 LLM 이 열린 후보를 최근 결정·완료와 의미 대조(수동 supersedes 링크 비의존)해 orphan/전제-stale 이면 발사 X + 닫기.

내용 읽기 ↗

Flutter analyze 는 런타임 assertion 을 못 잡는다 — 머지 전 네이티브 test 가 권위

flutter analyze 는 정적 분석만 봐서 위젯 조립 런타임 assertion(예: ListTile/CheckboxListTile 의 Material ancestor 누락)을 못 잡는다. 노드 Flutter PR 은 머지 전 본진 네이티브 flutter test 가 권위 — analyze-only 게이트는 반쪽. 복구는 Material(type: transparency) 로 감싸기.

내용 읽기 ↗

Linux 전용 명령(flock 등)은 command -v 가드로 — macOS 에서 silent fail 방지

flock 같은 util-linux 전용 명령을 macOS 에서 쓰면 command not found(127), || exit 0 과 합쳐지면 명령 부재까지 삼켜 hook 이 silent fail. command -v 가드로 있을 때만 사용. 본진 sync hook 4개가 만든 날부터 무동작이던 사고.

내용 읽기 ↗

5노드 Flutter SDK skew (3.41 ↔ 3.44) 가 만드는 forward/backward 회귀 cascade

여러 기기가 같은 Flutter repo 를 만지는데 SDK 버전(3.41.9 vs 3.44.0)이 다르면 한 그룹 PASS 코드가 다른 그룹에서 회귀한다. Flutter 3.42 가 ReorderableListView onReorder 를 deprecate + nullable 시그너처화 + onReorderItem 도입 → 같은 위젯 호출이 SDK 별로 valid 여부 갈림. 단일 SDK 게이트는 mesh 회귀 못 잡아 fix PR 이 forward/backward 로 반복(메모요 PR #23→#28→#34→#39, 3 PR 1 cycle). 신규 PR 은 두 SDK 다 통과하는 nullable-aware 코드 선호, deprecation API(withOpacity/Tooltip/Switch 등) 만질 때 strict 노드 cross-check 필수.

내용 읽기 ↗

텔레그램 plugin reply 툴이 사라졌을 때(ENOENT) — bot HTTP API 로 fallback + plist PATH fix

세션에 reply 툴이 안 박혀있으면(ToolSearch zero / /mcp ENOENT) 텔레그램 채널이 죽은 상태라 터미널 답이 폰에 0건 전달되는 silent fail. 2026-05-28 16:08~17:14 KST 약 1시간 사고. 원인은 com.user.tmux-claude.plist 의 PATH 에 절대경로 /Users/user/.bun/bin 누락 → telegram plugin 이 spawn 하는 bun ENOENT. 즉시 bot HTTP API curl 로 폰에 진단 1통 + plist PATH prepend + bootout/pkill/bootstrap v3 cold-restart 로 복구. launchd 는 ~/.bun/bin glob 확장 안 하므로 절대경로 필수.

내용 읽기 ↗

mac-report.sh 의 ssh 마지막 step glob NOMATCH 가 mirror chain 을 통째로 skip

노드→본진 보고가 본진 tmux 엔 정상 paste 되는데 봇 chat 알림 + 그룹 mirror 만 silent skip. set -euo pipefail 스크립트의 ssh oneliner 마지막 step rm -f pending-* 가 Mac zsh NOMATCH 옵션 trigger → ssh 비-제로 exit → set -e 가 직후 agent-msg-notify + forward-to-group 호출을 abort. paste 는 앞 step 에서 끝나 도착하지만 mirror 만 사라짐. fix = find -name 'pending-*' -delete 2>/dev/null; true 로 교체(빈 매치도 exit 0 + ; true 방어선). 전수조사 시 4 노드 동일 함정. 'mac-report 했는데 폰 알림 0' 은 본진 자동 surface 시그널.

내용 읽기 ↗

self-orchestration directive 어휘가 cyber 로 분류돼 prompt 차단 — admin 도메인 추상화로 sanitize

본인 기기끼리 작업을 넘기는 self-orchestration directive 인데도 본문 어휘가 침입성 표현으로 누적되면 Anthropic Usage Policy 분류기가 cyber content 로 읽고 prompt 자체를 차단(Cyber Verification Program 안내). 'ssh user@host tmux load-buffer', '우회/bypass', 'Claude Code 우회', '직접 ssh+tmux paste' 다발이 lateral movement/SSH abuse 로 분류됨 — 단일 표현은 통과해도 누적 밀도+admin 맥락이 임계 넘김. 해결 = admin 도메인 추상화(ssh+paste→통신 경로/스크립트 호출, 우회→대체 경로), internal command 는 코드블록 격리(분류기가 prose/code 구분), cyber-domain 단어 회피. 의심 시 사용자 지적 전 본진 자율 surface + 재작성.

내용 읽기 ↗

TOML config 에 root 키 추가 — file 끝 append 는 직전 [section] subkey 로 잡힌다

config.toml 에 root-level 키를 파일 끝에 append 하면 직전 [section] 헤더의 하위 키로 잡힌다(TOML 은 다음 [section] 전까지 모두 그 섹션 영향권). 2026-05-25 codex 5노드 YOLO 마이그레이션에서 sandbox_mode 가 [hooks.state] subkey 로 흡수돼 danger-full-access 미적용되는 함정이 한 사이클에 3회 반복. root 키는 파일 맨 위 prepend 또는 다른 root 키 옆에 박고, 추가 후 tomllib 파싱 1회 검증. INI·YAML 등 section 기반 설정 전부 동일 위험.

내용 읽기 ↗

앤트로픽 2026-06-15 빌링 분리 회피 4가지 — 회색지대 자동화를 보강재로

2026-06-15 부터 Claude Code 빌링이 인터랙티브 ↔ 프로그램/에이전트로 쪼개지고 후자는 별도 monthly credit pool (Max5× $100 / Max20× $200) 로 빠진다. codersera 정리 회피 4가지(DeepSeek CLI 갈아타기 / 오픈소스 프레임워크+자체 API 키 / Cursor IDE 통합 / 혼합 전략) 와, 사실상 5번째 회피로 작동하는 회색지대 자동화(Playwright MCP persistent / BrowserMCP) 를 보강재로 얹는 설계. 본진 5노드는 인터랙티브 풀(텔레그램→챗봇→Playwright 클릭) vs 자율잡 풀(autopilot/night-runner) 두 갈래로만 갈라두면 머리 덜 아픔. 헤드리스 SDK·Computer Use 시각방식은 디폴트 금지.

내용 읽기 ↗

Clawd on Desk 펫을 WSL2 챗봇에 1:1 연결하기 (Windows 노드)

Windows 노드의 책상 펫앱 Clawd on Desk를 그 머신의 실제 일꾼(WSL2 Claude Code 챗봇)에 1:1 연결하는 표준 절차+함정. 핵심: WSL bash엔 bare powershell.exe가 없어 풀패스 필수, 설치경로/HOME 머신별 상이라 실측, 설치본은 SCP 복사. 네이티브 hook 제거 시 manageClaudeHooksAutomatically:false+앱 재시작 안 하면 즉시 재주입돼 원복. 추가는 auto-manage 켜진 채 OK, 제거는 꺼야 박힘.

내용 읽기 ↗

자동 메일 발사는 Gmail MCP create_draft 가 아니라 gog CLI send 가 zero-touch

자동화 사이클에서 메일 한 통 발사 — Gmail MCP create_draft 는 초안만 만들고 사람이 Gmail UI 가서 send 눌러야 해서 zero-touch 끊김. gog send --to ... --subject ... --body ... 한 줄 OAuth 기반 즉시 발송이 zero-touch. 안전(검토 후 발송) 필요한 1회성 메일만 create_draft fallback.

내용 읽기 ↗

자주 안 만지는 repo 작업 시작 전 origin/HEAD + commit 뒤처짐 fetch 비교 reflex

오랜만에 작업하는 repo 는 default branch 가 main 인지 master 인지 + local 이 origin 보다 몇 commit 뒤처졌는지 둘 다 stale 가능. 5초 reflex: git fetch && git status -sb && git rev-list --left-right --count HEAD...@{u}. PR 만들기 직전 / CI 깨졌을 때 재의심.

내용 읽기 ↗

GH Pages custom domain cert 발급 멈췄을 때 CNAME 토글 재트리거 트릭

GitHub Pages 가 custom domain Let's Encrypt cert provisioning 을 큐에서 5시간 이상 멈추는 함정. gh api -X PUT pages -F 'cname=' → sleep 8 → -F 'cname=<domain>' 토글 트릭으로 30초 안에 authorization_pending → approved 강제 재트리거. https_enforced=true 도 cert 발급 후에만 가능.

내용 읽기 ↗

launchd plist 에서 tmux 호출 — socket path 명시 필수

launchd 가 실행하는 셸/스크립트는 TMUX env var 를 inherit 안 함 → tmux 단독 호출 시 새 서버 spawn 으로 기존 세션을 못 본다. tmux -S /private/tmp/tmux-$(id -u)/default 처럼 socket path 명시 필수. bash array TX=( tmux -S ... ) 정의 후 "${TX[@]}" 호출 패턴.

내용 읽기 ↗

Playwright/브라우저 stale cache 우회 — ?v=N 쿼리 cache buster 패턴

라이브 deploy 직후 Playwright navigate 시 브라우저가 이전 응답 캐시해서 stale 콘텐츠 표시되는 함정. URL 끝에 ?v=N 또는 ?_=<timestamp> 붙이면 캐시 키 달라져 강제 fetch. curl grep (서버 cache 무시) + Playwright ?v=N (클라이언트 cache 무시) 둘 다 통과해야 라이브 반영 확인.

내용 읽기 ↗

trio-vote 결정 패턴 — 옵션 surface + 3페르소나 + Phase 2.5 모순 점검 + 12-vote 확장

결정 모호한 가역적 outcome 에 대해 사람이 "트리오보트" 한 마디만 던지면 PM/엔지니어/비판론자 3페르소나 병렬 vote → 다수결 → 자동 실행까지 zero-touch. 1-1-1 동점 시 12-vote 확장, Phase 2.5 에서 페르소나 키워드-marker 모순 점검. 형님 직접 결정은 vote 결과보다 우선.

내용 읽기 ↗

Claude Code /loop 와 launchd / /schedule — 3가지 스케줄 메커니즘과 만료 정책

/loop fixed-interval(7일 cap, 세션 의존) / /loop dynamic(cap 없음, ScheduleWakeup chain) / /schedule(원격 cloud cron) / macOS launchd(영구) 4가지 메커니즘의 종료 정책·세션 의존성 비교. dynamic loop 의 컨텍스트·토큰 비용·prompt caching TTL 함정 + 강대종 환경 기준 적합 케이스 분류 (앱 빌드 polling/CI/배포 = loop, Telegram bot/인스타 자동/watchdog/worker mesh = daemon) 포함.

내용 읽기 ↗

session-clear /clear 안 발화 — 실패 모드 카탈로그 + v0.8 fallback 갈아타기

/clear 안 먹힐 때 의심해야 하는 실패 모드 5종 (polling 오탐 / 입력 버퍼 잔여 / 마커 race / 큐잉 / busy-loop abort) + 각 fix + 권장 흐름 (turn 분리 + 3회 abort 시 v0.8 nohup detached send-keys fallback). 2026-04~05 발견 5건 통합.

내용 읽기 ↗

LaunchAgent로 Claude Code를 상시 대기 Codex로 운영하는 패턴

맥미니 LaunchAgent가 tmux에 Claude Code(--dangerously-skip-permissions)를 상시 유지. process-agent-inbox.sh가 30s 폴링으로 agent-inbox 읽어 이 세션에 inject → 디렉티브 처리. OpenClaw와 독립된 구조.

내용 읽기 ↗

3-way 에이전트 메시지 프로토콜 — 버그 패턴 4개와 표준화 규칙

Protocol 헤더와 Telegram 전송 목적지는 완전히 다른 레이어. 로컬/피어 휴리스틱 추론 금지. 포맷 위반/중복/상태머신/Layer 분리 4개 버그 패턴과 수정 코드.

내용 읽기 ↗

3way 에이전트 텔레그램 메시지 표준화 — 맥북·WSL·맥미니 6방향 대칭 라우팅

맥북·WSL·맥미니 3대 간 텔레그램 6방향 메시지 표준화. [발신이모지→수신이모지] [타입] 내용 포맷, 수신자 채팅방으로 올바르게 라우팅. TELEGRAM_BOT_TOKEN_MACBOOK/WSL/MACMINI named 토큰 구조. mac-report.sh 자동 [결과] 알림·stop-ping 터미널 응답 포워딩 함정 + 맥미니 자율 응답 불가(본진 SSH 코디 패턴) 추가.

내용 읽기 ↗

Clawd on Desk + OpenClaw Codex 연동 끊길 때 재연결 방법

OpenClaw이 Codex를 app-server --listen stdio:// 모드로 실행 시 openclaw-trajectory 소스가 pidReachable=0으로 실패. Clawd + OpenClaw 재시작으로 openclaw-plugin 소스로 전환되어 정상 연결됨.

내용 읽기 ↗

ASC UI '해결되지 않은 문제' ≠ 실제 심사 거절 — API로 정확한 버전 상태 확인

ASC UI의 UNRESOLVED_ISSUES 배너는 reviewSubmission 컨테이너 상태이고, 실제 심사 상태는 appStoreVersions.appVersionState가 truth. Playwright 로그인 없이 JWT API 키로 정확한 상태 확인 가능. 유령 제출(items 0개) 다수 생성돼도 실제 심사에는 영향 없음.

내용 읽기 ↗

WSL alias mesh 점검 — `m` alias 누락 시 리눅스 기본 명령어 충돌

WSL `~/.bashrc`에 3-노드 alias mesh 일부(`m1`, `mb`)만 추가하고 `m`(자기 자신 tmux main attach)을 빠뜨리면, 리눅스 기본 명령어가 충돌하거나 command not found가 난다.

내용 읽기 ↗

Claude Code 캐시 TTL 5분 최적화 — 토큰 절약 리듬

Anthropic 프롬프트 캐시 TTL은 5분(300초). 같은 컨텍스트에서 **300초 안에 다음 메시지를 보내면 캐시 히트** → 입력 토큰 90% 할인. 리듬 조정만으로 비용 대폭 절감 가능.

내용 읽기 ↗

Flutter iOS 흰화면 — 물리 기기 CoreDevice unavailable

Flutter iOS 물리 기기 실행 시 흰화면이 뜨거나 `CoreDevice unavailable` 오류가 나면, **USB 연결 + 기기 신뢰(Trust) 허용 + 개발자 모드 활성화** 3단계를 순서대로 확인한다.

내용 읽기 ↗

Hyperframes — CC 스킬로 스크립트→TTS→자막→영상 풀자동화

`heygen-com/hyperframes` CC 스킬을 추가하면 자연어 지시 한 줄로 스크립트 작성 → TTS 생성 → 자막 합성 → 영상 렌더링 전 과정 자동화.

내용 읽기 ↗

LiteLLM 프록시 — 로컬 LLM을 팀에 OpenAI API 형식으로 공유

LiteLLM 프록시 서버 1개로 Ollama 로컬 LLM을 다른 PC에서 OpenAI API 형식으로 사용 가능. 기존 OpenAI SDK 코드 수정 없이 로컬 모델로 전환.

내용 읽기 ↗

Mac + WSL 병렬 사이클 스킬 — /parallel-cycle 한 번으로 두 기기 동시 지휘

/parallel-cycle 스킬 1회로 Mac N개 + WSL N개 작업을 동시 분산 실행. todos 자동 선택 → 텔레그램 브리핑 → WSL 디렉티브 자동 발송 → Mac 순차 실행 → mac-report.sh 완료 감지 → session-close 자동 호출까지 원스톱. 기존 순차 진행 대비 처리량 2배.

내용 읽기 ↗

Play Console 관리 게시(Managed Publishing) 함정

closed test 검토가 통과돼도 **관리 게시(Managed Publishing)가 ON이면 자동 publish가 차단**된다. 게시 개요 화면에서 관리 게시를 OFF로 토글해야 정상 게시된다.

내용 읽기 ↗

Playwright codegen — 브라우저 조작 녹화로 자동화 코드 즉시 생성

`playwright codegen`으로 브라우저 조작을 직접 녹화하면 Python/JS 코드가 자동 생성됨. 설치 없이 `uvx`로 바로 실행 가능.

내용 읽기 ↗

undetected-chromedriver — Python 3.10 전용, 3.11+ 크래시

undetected-chromedriver(uc)는 Google/Cloudflare captcha를 전부 통과하지만 **Python 3.11 이상에서 크래시**. pyenv로 3.10 환경 격리 필수.

내용 읽기 ↗

멀티기기 환경에서 할일 추천·편집 전 reality check — stale 상태 추천 차단

한 기기가 코드 작업을 완료해도 todos 미갱신 시, 다른 기기가 stale todos 로 이미 끝난 일을 재추천하는 stale-on-stale 이중 사고 발생. 할일 추천 전 git pull + gh repo list 24h activity reality check 의무화 + 코드 완료 이벤트 시 todos 업데이트 트리거가 근본 방지책.

내용 읽기 ↗

모니터링·알림 launchd 잡은 _disabled/ 바구니에 넣으면 안 된다 — 외부 신호 blind spot

토큰 절감 목적으로 launchd 잡을 _disabled/에 몽땅 끄면 모니터링·알림 잡도 같이 꺼져 Apple 심사 메일 등 외부 신호가 수시간~수일 누락. 리소스 소비형 잡과 모니터링 잡 분류 게이트 + lite 모드 대체가 근본 방지책.

내용 읽기 ↗

텔레그램 복붙용 명령어는 단독 메시지 — 설명 텍스트 0줄 혼합 금지

모바일 텔레그램 long-press copy = 메시지 전체 복사. 명령어와 설명 텍스트가 같은 메시지에 섞이면 복붙 시 라벨까지 붙어 명령이 깨짐. 복붙용 블록은 명령어만 든 별도 reply 1통으로 분리 필수. 예외 0줄 원칙.

내용 읽기 ↗

App Store 심사 제출: iPhone Only 앱도 iPad 13" 스크린샷 필수

Flutter 기본 TARGETED_DEVICE_FAMILY=1,2 설정으로 iPhone 전용 기획 앱도 iPad 지원으로 분류. '심사에 추가' 전 iPad 13" (2048×2732) 스크린샷 필수. sips -z 2732 2048 으로 iPhone 스크린샷 리사이즈 임시 해결, 근본 해결은 TARGETED_DEVICE_FAMILY=1 설정.

내용 읽기 ↗

google_sign_in 신규 iOS 빌드 = GIDClientID + URL scheme 사전 체크 게이트

Android 는 SHA-1 + 패키지명 자동 매칭이라 코드 변경 0 이지만 iOS 는 Info.plist 의 GIDClientID + reversed URL scheme 가 없으면 첫 sign-in 시 NSInvalidArgumentException 으로 즉시 강종. pre-build 셸 게이트(tools/check_ios_oauth.sh) + Dart Platform.isIOS fail-fast 두 겹으로 차단.

내용 읽기 ↗

iOS device 잠금 상태에서 Flutter run = "Could not run Runner.app" 오탐 — devicectl pre-check + 폴백

Flutter 의 'Could not run Runner.app' + 'Try Xcode > Run' 안내는 device 잠금 거부(SBMainWorkspace ... Locked)를 가리는 번역 오탐. flutter run 호출 전 'devicectl device info connected | grep unlocked' 게이트 + 에러 매칭 시 'devicectl device process launch' 직접 호출로 진짜 원인 surface.

내용 읽기 ↗

launchd register/bootstrap 직후 actually-running 검증 게이트 — silent fail 차단

launchctl load/bootstrap 가 silent-fail (exit 0 인데 등록 안 됨) 하는 케이스가 일상적. plist 존재 ≠ 잡 활성. bootstrap 직후 launchctl list 검증 + 미등록 시 exit 1 디폴트. unload/load 짝은 silent fail 잘 일으키니 bootout/bootstrap 으로 교체.

내용 읽기 ↗

Play Console testers REST API 는 개별 이메일을 받지 않는다 — Google Group 경유 설계 필수

edits.testers API 의 emails 필드는 문서에 있지만 실제 400 반환. googleGroups 배열만 유효. 개별 이메일 → Google Group 멤버 추가 → API 에 그룹 전달 흐름으로 설계해야 함.

내용 읽기 ↗

다기기 동시 작업 시 같은 파일 수정 충돌 방지 패턴

두 작업자(Mac 본진·WSL)가 같은 파일을 31분 안에 각각 수정하면 git merge 충돌 0이어도 **의미적 race** 가 발생한다. `git merge --no-conflict` 는 안전성 보증이 아니다. **작업 시작 전 파일 선언 + 중복 감지 + 즉시 중단** 3단계가 충돌 방지의 전부다.

내용 읽기 ↗

Playwright 로 Google OAuth 로그인 우회 — stealth 4종 디폴트

Playwright 로 띄운 Chrome 에서 Google 로그인하면 차단됨. channel:'chrome' + --disable-blink-features=AutomationControlled + --disable-features=IsolateOrigins,site-per-process + ignoreDefaultArgs:['--enable-automation'] 4종 동시 적용으로 우회. 어느 하나 빠지면 차단.

내용 읽기 ↗

Playwright MCP .mcp.json 에 --output-dir 절대 경로 필수 — cwd=/ 에서 ENOENT 방지

@playwright/mcp 는 --output-dir 미지정 시 cwd 상대 경로 .playwright-mcp 를 mkdir 시도. Claude Code가 cwd /로 시작하면 root 쓰기 권한 없어 모든 MCP tool call이 ENOENT로 실패. .mcp.json args에 절대 경로 --output-dir 고정이 근본 fix. plugin update 후 재확인 필수.

내용 읽기 ↗

WSL 에서 Windows-native flutter test 실행 — cmd.exe pushd UNC 우회

WSL bash 에서 /mnt/c/src/flutter/bin/flutter.bat 직접 호출은 CRLF/PATH 로 깨지고 powershell.exe + UNC cwd 도 .bat 내부 cmd 가 거부. cmd.exe /c 'pushd \\wsl.localhost\Ubuntu\... && C:\src\flutter\bin\flutter.bat test 2>&1 & popd' 한 줄로 우회. lotto-calc PR #3 V4 검증 (8/8 PASS, 4.85s).

내용 읽기 ↗

뉴스레터 원본 파일과 싱크 캐시 파일은 반드시 분리

로컬 원본 파일과 외부 플랫폼 backfill 캐시가 **같은 파일명을 공유하면** sync 스크립트가 원본을 덮어쓴다. **파일명 컨벤션을 처음부터 둘로 나눠야** 한다.

내용 읽기 ↗

동기화 스크립트는 원본 파일을 절대 덮어쓰지 않는다 — 원본/캐시 파일 분리 필수

sync/backfill 스크립트의 cacheFile 경로가 원본 콘텐츠 파일과 같으면 실행마다 원본 덮어쓰기. ep<N>-<DATE>.md(원본)과 ep<N>-cache.md(캐시) 분리 + 스크립트 상단 PROTECTED_PATTERN assert 1줄이 근본 방지책.

내용 읽기 ↗

Apple Silicon Mac 에서 Flutter iOS debug attach = Rosetta 필수

Flutter 가 묶어 보내는 iproxy 바이너리(libusbmuxd) 가 x86_64. Apple Silicon Mac 은 sudo softwareupdate --install-rosetta --agree-to-license 1회 필수. release ipa 영향 X, debug attach 만 막힘. /irun /arun 에 사전 게이트 박힘.

내용 읽기 ↗

CF Workers 에서 외부 LLM API 직접 호출 금지 — AI Gateway 경유 필수

CF colo 라우팅이 특정 ISP·지역 IP 를 한국 colo 로 매핑하면 outbound IP 가 OpenAI region-block 권역에 걸려 403 반환. api.openai.com 직접 호출 대신 CF AI Gateway 경유가 근본 fix. 출시 전 2개 이상 ISP/환경에서 LLM 호출 검증 필수.

내용 읽기 ↗

같은 turn 내 Write→commit 묶음, harness false positive — settings.json 영구 룰로 해결

Write 직후 같은 turn 에서 git commit 시 transcript flush timing race 로 harness sandbox 가 'Write 흔적 없다' false positive 발생. settings.json permissions.allow 에 'Bash(git commit*)' 추가가 근본 해결. auto mode 에선 1회성 Allow 무용.

내용 읽기 ↗

텔레그램 Bot API raw msg ID 는 사용자 폰에 안 보인다

`mcp__plugin_telegram_telegram__reply` 가 반환하는 `sent (id: NNNN)` 은 **Bot API 내부 message_id** 다. 사용자 폰 텔레그램 UI 에는 이 ID 가 노출되지 않는다. "id 7930 받으셨어요?" 는 사용자에게 의미 없는 정보다. **메시지를 특정할 때는 발송 시각(KST) + 메시지 키워드** 로 가리켜라.

내용 읽기 ↗

하네스가 default branch 직접 push 를 PR review 우회로 차단 — settings.json 좁은 allow 로 해결

하네스 분류기가 git push origin main 을 PR review 우회로 판단, CLAUDE.md 일반 가이드는 명시 승인으로 안 쳐줌. settings.json permissions.allow 에 'Bash(git push origin main)' 추가가 유일한 근본 해결. force push 는 별도 차단 유지. solo-dev repo 는 이 패턴, multi-device PR 분기 repo 는 혼용 가능.

내용 읽기 ↗

양방향 SSH config 에 ServerAliveInterval 박기 = stale 소켓 차단 영구 fix

서버 sleep / 네트워크 끊김 시 stale 소켓이 살아있는 듯 남아 키 입력 무반응. 양쪽 ~/.ssh/config 에 Host * 글로벌로 ServerAliveInterval 60 + ServerAliveCountMax 3 박으면 1분 keepalive + 3분 안에 죽은 연결 자동 종료. 한 번 박으면 영구 fix.

내용 읽기 ↗

텔레그램 복붙 메시지는 순수 블록만 — 라벨·안내 텍스트 혼입 금지

폰에서 텔레그램 메시지를 long-press copy 하면 **메시지 전체가 클립보드에 들어간다.** 명령어 블록에 `[관리자 PowerShell 에 그대로 복붙]` 같은 안내 텍스트를 같이 보내면 그 텍스트도 실행줄에 붙어 syntax error 가 난다. **복붙 전용 메시지에는 실행 가능한 코드 라인만** 들어가야 한다.

내용 읽기 ↗

macOS Ventura 이상에서 SSH 활성화는 GUI 토글만 — CLI systemsetup 차단

macOS 13+ 부터 sudo systemsetup -setremotelogin on 은 호출 터미널 앱에 FDA 가 있어야 실행됨. 신규 설치 터미널은 항상 FDA 미부여 상태. 시스템 설정 > 공유 > 원격 로그인 GUI 토글이 유일한 무조건 통과 경로. CLI 자동화 스크립트에서 이 명령 사용 금지.

내용 읽기 ↗

tmux capture-pane 으로 Claude 세션 감지 — 마커 확장 + viewport 범위 패턴

`tmux capture-pane` 기본값은 현재 viewport 만 캡처하고, grep 마커는 Claude Code UI 업데이트마다 바뀐다. **마커 확장 + `-S -200` viewport 확대 + 프로세스 fallback 3단계** 를 모두 적용해야 false-negative 0에 가까워진다.

내용 읽기 ↗

tmux Claude Code 세션 탐색은 이름 하드코딩 X — 동적 마커 grep + process fallback

원격 tmux 세션 이름 하드코딩(-t claude-main)은 빈 bash 수신으로 silent fail. 세션 목록 순회 + capture-pane -S -200 + 넓은 마커 grep(⏵⏵, shells · ↓ 포함) + process/attach fallback 2-layer로 활성 Claude Code 세션을 동적 탐색. Claude Code UI 업데이트로 마커 바뀌어도 fallback layer가 잡아줌.

내용 읽기 ↗

Playwright MCP 채널/샌드박스 설정은 env var 로 — .mcp.json 직접 수정 X

@playwright/mcp 디폴트 channel=chrome → WSL/Chrome-미설치 환경에서 100% fail. ~/.bashrc 에 PLAYWRIGHT_MCP_BROWSER=chromium + PLAYWRIGHT_MCP_NO_SANDBOX=1 두 줄로 .mcp.json 수정 없이 동등 설정. .mcp.json 직접 수정은 Claude Code self-modification gate 거부.

내용 읽기 ↗

Playwright MCP 다이얼로그 확정 버튼은 ref 직접 X, role+name+dialog scope 우선

Playwright snapshot 의 [ref=eXXX] 번호는 DOM 순서 기반이라 '먼저 나오는 게 긍정 버튼' 직관 규칙 깨짐. 다이얼로그 취소/완료 쌍 버튼이 있으면 ref 직접 클릭 = 오클릭의 직접 원인. role-based selector + name 매칭 + dialog scope 안에서 찾도록 박기.

내용 읽기 ↗

세션 중단 후 미커밋 파일 방지 — git status 가드 패턴

Write() 로 파일 생성 후 세션이 중단되면 git add/commit/push 가 누락된 채 로컬에만 남는다. 세션 시작 첫 단계로 git status --short 를 skills + daejong-page 양쪽에서 실행하는 것이 가장 단순한 안전망. 파일 쓰기는 commit + push 까지 한 묶음으로 처리.

내용 읽기 ↗

Claude Code 훅 기동 데몬은 세션 ID 기반 PID 파일로 격리

Claude Code Stop/UserPromptSubmit 훅 JSON stdin 에서 session_id 를 jq 로 파싱해 PID 파일 키로 쓰면 병렬 세션 간 격추 0. CLAUDE_SESSION_ID 환경변수는 훅에 주입되지 않으므로 stdin JSON 파싱 필수. session_id 없으면 stop 훅은 아무것도 안 함 (sibling 오격추 방지). daemon 에 set -e 금지 + disown + heartbeat 로그 4종 세트.

내용 읽기 ↗

Claude Code Bash 도구의 비대화형 zsh + flutter 절대 경로 resolver

Claude Code Bash = 비대화형 zsh, ~/.zshrc 미로드. fvm PATH 가 interactive rc 에만 박혀있으면 flutter not found. 모든 스킬 상단에 절대 경로 resolver 헤더 (FLUTTER_BIN=$(command -v flutter || ls /Users/user/fvm/versions/*/bin/flutter | head -1)) 박는 게 정답.

내용 읽기 ↗

iOS 릴리즈 IPA = arm64-only 보장 + lipo 검증

IPA 에 시뮬레이터용 x86_64 슬라이스 섞이면 ITMS-90087 reject. 빌드 직후 lipo -info 또는 unzip -p .../Runner | file - 로 arm64-only 검증을 배포 스크립트 고정 단계로. EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64 설정 필수.

내용 읽기 ↗

AppleScript 좌표 기반 탭 자동화는 단발 X, 검증+재시도 디폴트

macOS Retina 스케일링(2x) + 시뮬레이터 자체 하드웨어 스케일이 겹치면서 AppleScript 좌표가 ±1 행 drift. 단일 탭으로 끝내지 말고 탭 → 결과 검증 → 실패 시 ±1 행 보정 재시도 패턴 디폴트. 가능하면 좌표 대신 accessibility identifier 우선.

내용 읽기 ↗

iOS 시뮬레이터 preferences 주입은 simctl spawn defaults import 만 쓴다

iOS cfprefsd (Preferences Daemon) 가 plist 내용을 메모리에 캐시. PlistBuddy/plutil 직접 수정 = 파일은 바뀌어도 앱은 옛 값 계속 읽음. xcrun simctl spawn <sim_id> defaults import <domain> <plist> 로 cfprefsd 거치게 만들어야 정상 반영.

내용 읽기 ↗

장시간 백그라운드 데몬은 pkill 패턴 매칭으로 전/후 청소 디폴트

세션 강제 종료 시 자식 데몬에 종료 신호 미전달 → 오펀 누적 + 다음 세션 중복 기동. PID 기반 종료 신뢰 X, pkill -f <고유패턴> 을 데몬 기동 스크립트 전/후 모두 박기. 고유 패턴 신중 선정 (광범위 pkill 금지).

내용 읽기 ↗

AppleScript 로 대용량 바이너리 자동화 — 디스크 경로 패턴

AppleScript-osa 브리지는 페이로드 크기 상한이 있어 1MB+ 바이너리를 텍스트로 못 넘김. 디스크에 먼저 두고 osascript 에 경로만 전달. base64 청크 우회는 가능하지만 안 권장.

내용 읽기 ↗
작업장 전체 페이지 목적에 맞는 페이지 찾기