← 작업일지

2026-05-08 · v1.0.1

2026.05.08 작업일지 v1.0.1

3-way 프로토콜 버그 4개 수정 + 에이전트 합의 루프(loop-judge + loop-run) 완성

오늘의 궤적

오전 내내 MacBook/WSL/Mac mini 3기기 간 Telegram 메시지 프로토콜의 숨겨진 버그들을 하나씩 발굴하고 수정했다. 인프라 삽질처럼 느껴졌지만, 오후엔 그 위에 에이전트 합의 검증(loop-judge)과 작업 루프(loop-run)를 쌓아 에이전틱 엔지니어링 스택을 완성했다. “그제 어제 삽질만 하고 있네”라는 말로 시작했지만 막판에 의미 있는 구조가 나왔다.

3-way 메시지 프로토콜 (agent-msg-notify.sh)

버그 4개 발견 + 수정

버그 1 — 포맷 위반: MSG에 (HH:MM KST) 타임스탬프 삽입. 엄격 포맷 깨짐.

  • 수정: MSG="[${FROM}→${TO}] [${TYPE}] ${SUMMARY}" 타임스탬프 제거

버그 2 — 중복 전송: 동시 호출 시 뮤텍스 없어 동일 메시지 n회 전송.

  • 수정: /tmp/agent-msg-lock/<hash>.lock — 3초 내 동일 호출 차단

버그 3 — 상태머신 미완성: 전송 실패해도 COMPLETED 기록.

  • 수정: curl 성공 이후에만 COMPLETED. 실패 시 FAILED 기록, exit 1

버그 4 (핵심) — Protocol identity ≠ Transport routing:

  • 기존: TOKEN 선택을 “현재 기기 == TO 기기?” 휴리스틱으로 처리 → 실행 기기마다 다른 bot으로 전송
  • 수정: Layer 1(프로토콜 헤더) / Layer 2(Telegram 전송 목적지) 완전 분리
    case "$TO_NORM" in
      macbook) SEND_TOKEN="${TELEGRAM_BOT_TOKEN_MACBOOK:-}" ;;
      wsl)     SEND_TOKEN="${TELEGRAM_BOT_TOKEN_WSL:-}" ;;
      macmini) SEND_TOKEN="${TELEGRAM_BOT_TOKEN_MACMINI:-}" ;;
    esac
    로컬/피어 휴리스틱 완전 제거. TO 이름만 보고 결정.

5단계 순차 검증 (전부 PASS)

  1. 타입 검증: debug/retry → exit 1
  2. 포맷 검증: KST 없음, [🍎→🪟] [명령] 내용 정규식 통과
  3. Dedup: 3초 내 재호출 → “(dedup: identical message within 3s, skipping)”
  4. 상태머신: 명령 후 WAITING_RESULT 파일 생성, 결과 후 삭제(COMPLETED)
  5. 3-way 포맷: macbook↔wsl↔macmini 6방향 전부 PASS

Mac mini 동기화

Mac mini git pull 경로 불안정 → scp 직접 동기화. 양 기기 동일 버전 확인.

노하우 저장

daejong-page/knowhow/2026-05-08-3way-agent-msg-protocol.md — 버그 4개 패턴 + Layer 1/2 분리 원칙 + 3기기 동기화 체계 기록.

Mac mini Codex 타이핑 인디케이터

증상: Codex가 백그라운드 작업 중 “입력중…” 표시 안 됨.

원인: OpenClaw agents.defaults.typingMode 미설정.

수정:

  • openclaw.json"typingMode": "instant" 추가
  • openclaw daemon restart → Telegram 채널 reconnected

에이전트 합의 루프 설계 + 구현

loop-judge.sh

목적: MacBook Claude + Mac mini Codex 2-agent 합의 검증

흐름:

  1. MacBook: claude --print로 성공 기준 대비 출력 자체 평가
  2. Codex에게 directive → SSH로 MacBook에 결과 파일 기록
  3. 합의 판정: SUCCESS / FAIL / DIVERGE / TIMEOUT

실전 테스트: sw_vers 실행 → MacBook SUCCESS + Codex SUCCESS → 합의 SUCCESS

스킬 등록: 트리거 “합의 검증해줘”, “두 에이전트 확인” 등

loop-run.sh

목적: PLAN → EXECUTE → JUDGE → REPORT 전체 작업 루프

흐름:

목표 입력
→ Claude가 JSON task 배열로 분해 (PLAN)
→ 기기별 실행: macbook(로컬)/wsl(directive+SSH)/macmini(Codex+SSH)
→ loop-judge 합의 검증, 최대 2회 재시도
→ 전체 완료: 텔레그램 보고

스킬 등록: 트리거 “루프 돌려줘”, “/loop-run” 등

3way 테스트

  • Mac mini → MacBook 명령 테스트 (Mac report 수신 + 결과 회신) ✅
  • MacBook → Mac mini 명령 테스트 (directive + 결과 대기) ✅
  • loop-judge 실전: sw_vers 평가 합의 SUCCESS ✅

학습·상담

  • 에이전트 진화 3단계: Tool 명확화 → 자기검증 루프 → 에이전트 분업. 지금 셋업이 3단계 시작점.
  • 바이브코딩 vs 에이전트: 바이브코딩은 사람이 방향, LLM이 코드. 에이전트는 LLM이 목표 분해·실행·검증 루프 자율 운영.
  • 자연어 트리거: SKILL.md 트리거 패턴 → Claude가 자동 매칭해 스킬 호출.

관련 커밋

repoSHA메시지
daejong-page859b731knowhow: 3-way 에이전트 메시지 프로토콜 버그 패턴 4개 기록
claude-automations94ba8a8feat(loop-run): PLAN→EXECUTE→JUDGE→REPORT v1
claude-automations80c527cfeat(loop-judge): agent consensus loop v1
claude-automationsa59b92bfix: Layer 1/2 분리
claude-automations9a23f64fix: 포맷 위반 + dedup + 타입 검증
claude-skills2e6a063feat(loop-run): 에이전트 루프 스킬
claude-skills492b6c8feat(loop-judge): 합의 검증 스킬

남은 작업

  • loop-run 실전 테스트 (macmini/wsl task 포함)
  • 단어요 1.0.1 ASC 재제출 (China 배포 제외)
  • 로또 계산기 scaffold