2026-05-13 · 개발 컨퍼런스 · 30분

SGwannabe Agent 엔지니어링

1인이 31 페르소나로 굴리는 회사

강태주 (Kang Taeju) SGwannabe 수석 개발자 · 전직 프로게이머 → 커뮤니티 운영자 → 독학 개발자

AI 와 함께 일해서 업무 효율을 높이는 방법

오늘 가져갈 3가지

  1. LLM 만으로는 시스템이 안 되는가 — 하네스 4대 기둥
  2. 어떻게 우리가 그걸 자체 서비스에 이식했는가 — 20+ 프로젝트 투어 + 라이브 데모
  3. 무엇이 바뀌었는가 — 패턴 5가지 + 사고 3건의 교훈

1인이 동시 운영 중인 시스템 — 20+

ElectroAssist
이미르 전기 전문가 챗봇
FastAPI + React + Vertex
gametalktalk
게임 챗봇 (루티)
RAG v2 · 3 namespace
MyMind
심리 연구소
my-mind.kr
JIINSI
AI 뉴스레터 + 팟캐스트
5채널 일일 자동발행
TarotBook
출판 원고 편집 + epub/pdf
소피 검토 사이클
BloomWrite
AI 책쓰기 서비스
writer.synapticbloom.com
novel_2027
장편 소설 집필
『발코니에 놓인 낯선 화분』
WORLD LOOK BOOK
AISTUDIO 비주얼 북
React 프로토타입
leesangjin_paper
GC-CVAE 논문 (v5.6)
학술 집필
sg_deepresearch
딥리서치 에이전트
자율 리서치
CBT
자격증 문제은행
Q-Net + AI 변형
QPASS
학습 도우미
migration in progress
child_q
아동 학습 Q&A
voice-persona-lab
음성 페르소나 + TTS · STT
KAMRA Deja-Vu
인터랙티브 비주얼
InsightX
분석 대시보드
flowmango / ABC
실험 / 분류기
SGwannabe
이 모든 걸 운영하는 허브
agent-runner · 31 personas

챗봇 · 콘텐츠 · 책/장편 · 논문/리서치 · 학습 · 실험 · 플랫폼

사람은 한 명. 비결은 — 시스템 자체가 사람처럼 일하기 때문.

PART 1

AI 와 일하는 4가지 기둥

모델은 똑같다. 그 둘레의 환경이 다르면 결과가 달라진다.

AI 엔지니어링 4대 축

의미비유
1. 프롬프트 엔지니어링AI 에게 말을 잘 거는 기술말 거는 법
2. 컨텍스트 엔지니어링필요한 정보를 적절히 제공지도 보여주기
3. 하네스 엔지니어링 ★AI 가 실수할 수 없는 환경을 만드는 기술가죽끈 · 고삐 · 수레
4. 에이전틱 엔지니어링자율 워크플로우 설계말을 훈련시키는 법
"말을 아무리 잘 훈련시켜도 마구가 없으면 밭을 갈 수 없다."
— 하네스 엔지니어링의 핵심 비유

하네스는 다른 3개를 졸업한 다음이 아니라, 처음부터 같이 짜야 한다.

용어
프롬프트 엔지니어링
AI 에게 효과적으로 지시문 작성
컨텍스트 엔지니어링
작업에 필요한 정보·파일·메모리 제공 설계
하네스 (harness)
말의 마구 — AI 가 실수할 수 없는 환경·도구·규칙의 묶음
에이전틱
AI 가 스스로 도구를 골라 실행하는 자율 워크플로우

AI 가 실수 안 하게 만드는 4가지 기둥

1

컨텍스트 파일

고삐 · 방향

  • CLAUDE.md / AGENTS.md / 규칙 파일
  • "부탁이 아닌 런타임 설정"
2

자동 강제

울타리

  • 린터 · 테스트 · pre-commit hook
  • "프롬프트 = 부탁 / 시스템 = 강제"
3

도구 경계

접근 제한

  • 파일 RW/RO · DB SELECT만 · 셸 화이트리스트
  • "할 수 있는 것을 제한"
4

가비지 컬렉션

자동 청소 + 자기진화

  • 중복 · 데드코드 · 안티패턴 감지
  • "실수 → 새 규칙 → 하네스 진화"
용어
린터 (linter)
코드 스타일·오류 자동 검사 도구 (eslint, ruff 등)
pre-commit hook
git 커밋 직전 자동 실행되는 검사 스크립트
데드 코드
참조되지 않아 실행되지 않는 코드
가비지 컬렉션
원래 메모리 자동 회수 개념 — 여기서는 코드·규칙의 자동 정리

Claude Code 가 이미 가진 5요소

요소역할우리 시스템 대응
Hook이벤트(세션 시작, prompt submit, 도구 호출)에 자동 실행SessionStart hook → 최근 커밋 / 미정리 repo / 서비스 상태 주입
Skill트리거 키워드로 자동 활성화되는 명세된 절차jiinsi-podcast-cbr, key-rotation, verify-handoff …
Memory대화 사이를 잇는 영속 컨텍스트~/.claude/projects/-home-sg/memory/*.md 90+개
Tool외부 세계와 상호작용 (파일, 셸, 브라우저, MCP)Bash · Read · Edit · Chrome MCP · Vercel MCP
Sub-agent독립 컨텍스트로 위임 (Explore / general / pm-agent …)agent-runner 페르소나 31명
용어
Hook
특정 이벤트(세션 시작·도구 호출 등)에 자동 실행되는 셸 명령
Skill
트리거 키워드로 자동 활성화되는 명세 절차 (SKILL.md)
MCP
Model Context Protocol — 외부 서비스를 AI 도구로 노출하는 표준
Sub-agent
격리된 컨텍스트로 작업을 위임 — 메인 세션 오염 방지

5대 시스템 — 각자 잘하는 게 다르다

시스템비유핵심SGwannabe 가 차용한 것
gstack프로세스 매뉴얼23개 스킬 · Conductor 병렬스킬 팩 / 데몬 상태 파일 모델
Claude Code코딩 도구에이전트 루프 + Hooks + Skills + Subagents5요소 전부. 우리 시스템의 IDE 레이어
OpenClaw직원 1명채널 게이트웨이 + Scout loop + task self-generationScout 5종 + dedupe + 자동/보고 분리
Paperclip회사 전체조직도 · 월별 예산 · 감사 로그 · 승인 게이트execution_logs · 승인 워크플로우
SGwannabe통합 플랫폼위 4개의 장점만 골라 조립
   프롬프트/컨텍스트   →  gstack         (스킬 팩, 워크플로우)
   도구 실행          →  Claude Code   (에이전트 루프, Hooks)
   채널/상시 운영      →  OpenClaw      (데몬, 채널 라우팅, Scout)
   조직/거버넌스       →  Paperclip     (조직도, 예산, 감사)
   통합 플랫폼        →  SGwannabe     (위 4개 장점 조합)
        
용어
Conductor
gstack 의 병렬 에이전트 실행기 (10~15 에이전트 동시 처리)
Scout loop
주기적으로 시스템을 스캔해서 이상을 자동 task 로 만드는 루프
채널 게이트웨이
텔레그램·Slack·WhatsApp 등 다양한 메신저를 하나로 묶는 허브
오케스트레이션
여러 에이전트·작업의 흐름을 조율하는 상위 레이어

참고한 자료 (원천)

gstack

github.com/garrytan/gstack

23개 스킬 · 3중 hook · Playwright daemon · self-evolving memory · session intelligence

Claude Code Guide

github.com/zebbern/claude-code-guide

Hooks 15종 / Skills / Subagents / Plan mode 의 실전 패턴 정리

OpenClaw

github.com/openclaw/openclaw

채널 게이트웨이 + Scout loop + task self-generation + worker/company 구분

Paperclip

github.com/paperclipai/paperclip

"회사 단위" 오케스트레이션 — 조직도 · 월별 예산 · 불변 감사 로그 · 승인 게이트

하네스 엔지니어링 프레임

한국 개발 커뮤니티에서 회자되는 강의

"에이전트가 실수했을 때 프롬프트를 고치지 마세요. 하네스를 고치세요." · 4대 기둥 (컨텍스트 / 자동 강제 / 도구 경계 / 가비지 컬렉션)

+ Karpathy 4 원칙 (Think Before Coding / Simplicity / Surgical / Goal-Driven) — 페르소나 task 발행 SOP 의 토대.

좋은 점만 골라 우리 환경에 맞게 재조립 — 그대로 들고 오지 않았다.

PART 2

우리가 만든 시스템 투어

SGwannabe · JIINSI · ElectroAssist

전체 지도

   ┌─────────────────────────────────────────────────────────────┐
   │              사용자 (텔레그램 / 음성 / 슬래시)              │
   └──────────────┬────────────────────────────┬─────────────────┘
                  │                            │
       ┌──────────▼──────────┐      ┌──────────▼──────────┐
       │  Claude Code CLI    │      │  sgw-backend (8100) │
       │  (개발·운영 IDE)    │      │  대시보드 · API     │
       └──────────┬──────────┘      └──────────┬──────────┘
                  │                            │
                  │              ┌─────────────▼─────────────┐
                  │              │   agent-runner (데몬)     │
                  │              │   31 personas · 3 exec    │
                  │              │   Scouts · Watchdogs      │
                  │              └─────────────┬─────────────┘
                  │                            │
   ┌──────────────▼────────────────────────────▼─────────────────┐
   │  서비스 (20+)                                                │
   │  ┌─ JIINSI · ElectroAssist · gametalktalk · MyMind          │
   │  ├─ BloomWrite · novel_2027 · WORLD LOOK BOOK · TarotBook   │
   │  ├─ leesangjin_paper · sg_deepresearch                      │
   │  ├─ CBT · QPASS · child_q                                   │
   │  └─ voice-persona-lab · KAMRA · InsightX · …                │
   └─────────────────────────────────────────────────────────────┘
        

ElectroAssist — 이미르 전기 전문가 챗봇

스택

  • FastAPI (async) + React + Tailwind
  • 호스트 MySQL (docker mysql 띄우지 않음)
  • Vertex AI 단일 경로 (embedding :predict + grounding)
  • Azure VM 시연 환경 (NSG 80/443)

최근 마일스톤

  • Vertex-only 마이그레이션 완성 (보안 패치 포함)
  • 어드민 테이블 자동 마이그레이션 (model_configs 외 5개)
  • exception 마스킹 보강 → 시연 노출 안전

적용된 하네스 패턴

  • 컨텍스트 파일: project_electroassist_*.md 3개 (DB / 시연환경 / 상태)
  • 도구 경계: docker mysql 금지 → 호스트 MySQL 강제
  • 자동 강제: exception 마스킹 / Vertex-only 정책
  • 가비지 컬렉션: SessionStart 에 미정리 repo · 디스크 점검 자동 주입

JIINSI — 매일 04:50 → 07:00 자동 발행

   05:00  collect      뉴스 수집 (RSS · API)
   06:00  summarize    Vertex Gemini 로 한국어 요약
   06:30  podcast      Gemini TTS → ffmpeg CBR 192k mp3
   07:00  publish      사이트 · 네이버 · 팟빵 · X · 텔레그램 5채널
   25 * * * *  publish_watchdog   매시 25분 실패 자동 재시도
   08:00  naver QA     발행 직후 무결성 점검
   23:00  GA · 네이버 통계 수집
        
  • 각 단계는 독립 cron → 한 단계 실패가 다음 단계를 막지 않음 (fail-open)
  • publish_history 테이블이 발행 상태의 진실의 원천
  • 워치독은 실패만 골라서 재시도 → idempotent

JIINSI 발행 회복탄력성 6-Layer

Layer역할구현
1. Pre-flight발행 전 dry-run · 키 만료 · 디스크 점검publish_verifier.py
2. Fail-open Decoupling채널 1개 실패가 다른 채널을 막지 않음채널별 try/except + per-channel state
3. Auto-recovery실패 항목 자동 재시도 (1h / 6h)publish_watchdog.py · 25분 cron
4. Health Check발행 직후 채널별 실제 노출 확인naver_publish_qa.py · 08:00 cron
5. Observability모든 단계 텔레그램 로깅TG bot · 평문 시크릿 차단
6. Recovery Automation사람 개입 없이 누락분 재발행republish_daily.py · republish_podcasts.py

4-12 ~ 5-4 동안 매일 반복된 5종 사고 → 6-Layer 도입 후 5-9 빈 발행 1건만 발생 → 코드 패치로 차단.

용어
Pre-flight
비행기 이륙 전 점검 — 발행/실행 전 사전 검증
fail-open
일부 실패가 전체를 멈추지 않는 설계 (vs fail-close)
idempotent
같은 작업을 여러 번 해도 결과가 동일 — 재시도 안전
워치독 (watchdog)
실패·이상을 감시하다 자동 복구·알림하는 백그라운드 프로세스
cron
정해진 시간에 자동 실행되는 Linux 작업 스케줄러

SGwannabe — agent-runner 데몬 (gstack + OpenClaw 차용)

   sg-pc1 (PC #1)                            sg-pc2 (PC #2, 예정)
     ├─ agent-runner.service                   ├─ agent-runner.service
     │   ├─ 머신 등록 + heartbeat 30s          │   …
     │   ├─ task fetch (HTTP poll)
     │   ├─ executors/
     │   │   ├─ claude_executor   (Claude Max CLI subprocess)
     │   │   ├─ gemini_executor   (Vertex AI)
     │   │   └─ script_executor   (bash/python)
     │   ├─ scouts/                            ← OpenClaw 차용
     │   │   ├─ code_scout · data_scout
     │   │   ├─ content_scout · pipeline_scout
     │   │   └─ metric_scout    (dedupe 7일)
     │   └─ verify_logger → MySQL + TG
     └─ ~/.sgwannabe/runner.json (상태 파일)   ← gstack 차용

   sgw-backend (8100)  ← 대시보드, task queue, persona registry
        

gstack 의 상태 파일 + 하트비트 + OpenClaw 의 Scout loop + task self-generation 조합. Claude Max CLI subprocess 로 정액제 안에서 무제한 호출.

용어
daemon (데몬)
백그라운드에서 상시 실행되는 프로세스 (systemd 서비스)
heartbeat
"살아있음" 을 주기적으로 알리는 신호 (30초 간격)
subprocess
현재 프로세스에서 띄운 자식 프로세스 — claude CLI 를 이렇게 호출
executor
작업 종류별 실행 핸들러 (claude / gemini / script)
dedupe
중복 제거 — 같은 이슈가 7일 안에 또 잡히면 task 생성 안 함

페르소나 — 31명의 작은 전문가 (Paperclip 조직도)

구조 (md 파일 한 장)

---
id: jiinsi-cs
name: 이지혜 (JIINSI CS 매니저)
runtime: claude
project: JIINSI
skills:
  - korean-writing
  - customer-service
  - reply-drafting
memory_namespace: jiinsi-cs
---
# 역할
당신은 JIINSI 의 CS 담당자 이지혜입니다.
- 4 외부 채널 + 사이트 댓글 응대
- 24h 안 답글 약속
- 호칭 "독자님" · 이모지 금지
…

조직도 (Paperclip 모델)

  • 개발 3명 (gametalktalk · electro · agent-runner)
  • 콘텐츠 2명 (youtube · 소피 책 편집)
  • 운영·CS 5명 (이지혜 CS · 세무 · 변리 · 국책과제 …)
  • 모니터 1명 (system-monitor)
  • 자문 3명 (한지원 세무 · 박재훈 변리 · 유성호)
  • ...총 31명, DB 정식 23 + 외부 .md 8

페르소나 = Sub-agent 의 스킨 + skill 의 묶음 + memory_namespace. 사용자는 "이지혜에게 맡겨" 한 마디만.

용어
runtime
페르소나 실행 환경 — claude / gemini / script 중 하나
memory_namespace
페르소나 전용 메모리 격리 공간 (이지혜의 기억 ≠ 강태주의 기억)
skills 배열
페르소나가 활성화할 수 있는 절차/도구 목록
YAML frontmatter
markdown 파일 맨 위의 --- 블록 메타데이터

텔레그램 음성 지시 → 자율 실행

   1.  사용자 음성    : "이지혜한테 어제 댓글 답글 정리해서 보고하라고 해"
   2.  Telegram bot   →  task queue (MySQL)
   3.  agent-runner   →  persona=jiinsi-cs · runtime=claude · skills 로드
   4.  claude_executor →  Claude Max CLI subprocess
                       ↓
                       4 채널 selenium / tweepy / API 호출
                       ↓
                       답글 초안 작성 → 사용자 승인 대기
   5.  verify_logger  →  TG 로 결과 보고 (텍스트 + 링크)
   6.  사용자가 "ok"  →  실제 게시
        

사람 개입은 의사결정만. 정보 수집 · 초안 · 게시 · 로그는 모두 자동.

운영 결과

20+
동시 운영 프로젝트
31
페르소나
5
JIINSI 일일 발행 채널
90+
메모리 파일
30+
스킬
₩0
Claude 토큰 비용 (Max 정액)
챗봇 3 콘텐츠 자동발행 2 AI 책쓰기 3 학술 논문 1 딥리서치 1 학습/문제은행 3 실험/연구 5+ 플랫폼 1

사람 1명이 운영. 사고가 났을 때 페르소나가 먼저 알아채고 텔레그램으로 보고한다.

PART 3 · LIVE DEMO

실제로 어떻게 굴러가는가

5분 · 3 시나리오

데모 ① · SessionStart hook

SessionStart hook 실행 화면

claude CLI 실행 → 빈 세션에 컨텍스트 자동 주입

  • ① 최근 커밋 (프로젝트별)
  • ② 마지막 세션 마지막 교환
  • ③ 미정리 repo 경고
  • ④ 서비스 헬스 (sgw-backend · agent-runner)

"빈 채팅창이 아니라 방금까지 일하던 동료가 들어옵니다."

하네스 4대 기둥 ①컨텍스트 파일 + ④가비지 컬렉션(미정리 감지)이 한 번에 동작

용어
SessionStart hook
claude CLI 실행 직후 가장 먼저 발동되는 hook — 컨텍스트 자동 주입
미정리 repo
미커밋·미푸시 변경이 남은 git 저장소
컨텍스트 주입
모델 입력에 외부 정보를 자동으로 끼워 넣는 것

데모 ② · 텔레그램 → 페르소나 task

텔레그램 페르소나 task 화면

왼쪽 텔레그램, 오른쪽 task queue 라이브

  • persona 매칭 → jiinsi-cs 자동
  • skills 자동 로드 → 한국어 글쓰기 / 답글 작성
  • verify_handoff → "한번 읽어보시고 OK 주시면 게시"

사람 개입은 의사결정

용어
task queue
대기 중인 작업 목록 — status: queued → running → done
selenium
브라우저 자동화 도구 (네이버·팟빵 등 RSS 미지원 채널에 사용)
tweepy
X(Twitter) API Python 라이브러리
verify_handoff
작업 완료 후 "사용자가 확인" 단계를 강제하는 패턴

데모 ③ · 워치독이 사고를 잡는 순간

워치독 자동 재시도 화면

cron log + 텔레그램 알림 + DB 상태 변화

  • tail -f publish_watchdog_cron.log
  • ② 텔레그램 "✓ 1건 자동 재시도 성공"
  • ③ DB status: failed → success

"사람이 새벽에 깰 필요 없는 시스템 — 6-Layer 의 끝"

용어
publish_history
발행 이력 테이블 — status, retry_count, recovered_at 컬럼 보유
tail -f
로그 파일의 새로 추가되는 줄을 실시간으로 출력
logNo
네이버 블로그 글 고유 ID — 삭제 시 영구 소실
Smart Editor
네이버 블로그의 작성 에디터 (마크다운 → 네이버 포맷 변환 필요)

PART 4

핵심 패턴 5가지

여러분 시스템에 바로 이식 가능한 것들

패턴 1 · 3계층 컨텍스트

   ┌────────────────────────────────────────────────┐
   │  CLAUDE.md  (전역 · 모든 세션 자동 로드)        │
   │  ─ 개발 철학 · LLM 라우팅 · 보안 · 코딩 규칙    │
   ├────────────────────────────────────────────────┤
   │  Memory  (~/.claude/.../memory/*.md)            │
   │  ─ user / project / feedback / reference        │
   │  ─ MEMORY.md = 인덱스, 본문은 별도 파일         │
   ├────────────────────────────────────────────────┤
   │  Skill  (트리거 키워드로 활성화)                │
   │  ─ 절차 · 체크리스트 · 도메인 지식             │
   └────────────────────────────────────────────────┘
                        ▲
                        │ SessionStart hook 으로
                        │ 자동 결합 + 최근 커밋 / 상태 주입
        

왜 3계층? 전역(항상) / 영속(인덱스로) / 트리거(키워드로) 의 분리. 한 곳에 다 넣으면 컨텍스트 폭발.

용어
CLAUDE.md
Claude Code 가 모든 세션에 자동 로드하는 프로젝트 규칙 파일
인덱스 파일
본문이 아니라 본문 파일 목록만 갖는 파일 (MEMORY.md)
컨텍스트 폭발
한 번에 너무 많은 정보를 넣어 모델 토큰·집중도가 무너지는 현상

패턴 2 · 회복탄력성 6-Layer

JIINSI 사고 5종에서 추출한 일반 원칙

  • 1. Pre-flight — 시작 전 사전 점검 (키 · 디스크 · 외부 의존성)
  • 2. Fail-open Decoupling — 채널/단계를 독립 cron 으로 쪼개기
  • 3. Auto-recovery — 실패는 워치독이 잡아서 재시도 (idempotent)
  • 4. Health Check — 발행 후 실제 노출/도달 확인
  • 5. Observability — 모든 단계 텔레그램 로깅
  • 6. Recovery Automation — 사람 개입 없이 누락분 재발행

새 발행 코드 작성 시 자동 적용 (메모리 feedback_jiinsi_publish_resilience.md).

패턴 3 · 페르소나 자기검증

verify-done

페르소나가 "완료" 보고 전 자기검증 강제:

  1. 커밋이 실제로 생성됐는가
  2. 산출물 파일이 존재하는가
  3. 테스트가 통과했는가

3개 모두 yes 일 때만 완료로 인정.

verify-handoff

외부 채널 발행 끝났을 때 "완료" 만 말하지 말고 사용자에게 직접 확인 요청:

❌ "팟빵 업로드 완료"
✅ "팟빵에 [제목] 올라갔는데
    한번 들어보시고 음질·길이
    이상 없는지 확인 부탁드립니다."

2026-04-28 4/28 daily 사고 후 강제.

패턴 4 · 교차모델 검증

"자기 모델이 자기 답을 평가하면 confirmation bias 가 들어간다"

자기검증의 한계

패턴 3 의 verify-done 은 "완료했나" 만 본다. "옳은 방향으로 가는가" 는 못 본다.

2026-05-14 사고: Opus 4.7 가 paradigm "강력" 평가 → Sonnet 4.6 교차검증 → 5가지 결정적 비판 → NeurIPS accept 70% → 3-7%. 70%p 격차.

강제 매트릭스

현재검증 모델
Opus 4.7Sonnet 4.6
Sonnet 4.6Opus 4.7
Haiku 4.5Sonnet 4.6
cat prompt.md | \
  claude -p --model claude-sonnet-4-6 \
  --output-format text > result.md
# Claude Max CLI subprocess · 비용 0원

트리거: "검증해줘 · QA · 리뷰 · 비판 · 검토 · double check · second opinion · 독립 검증". 도메인 페르소나 강제 (NeurIPS AC · senior engineer · 임상 통계학자 등).

용어
confirmation bias
자기 답을 옹호하는 편향 — 같은 모델이 자기 결과 평가하면 발생
cross-model verification
다른 Claude 모델 (Opus ↔ Sonnet) 로 페르소나 강제 검증
CLI subprocess
claude -p --model X 비대화형 호출 — Max 정액제 안에서 비용 0

패턴 5 · LLM 호출 단일 정책

"LLM 호출 경로는 두 개만 허용한다"

허용경로비용
Claude Max 정액제 — Claude Code CLI / app 이 claude subprocess 호출0원
GCP Vertex AI (synapticbl00ming billing) — 서비스별 키 분리billing 리포트로 비용 추적
Gemini AI Studio (generativelanguage)카드 종량
Anthropic API 직결 / OpenAI / Grok / 기타외부 카드 청구

서비스 추가 시 새 Vertex 키 발급 강제 → billing report 가 서비스별 비용 추적 가능.

용어
Vertex AI
GCP 의 통합 ML 플랫폼 — LLM·embedding·grounding 모두 지원
subprocess (Claude CLI)
Python·Node 등에서 claude CLI 를 자식 프로세스로 호출
billing report
GCP Cloud Billing 의 서비스/키별 비용 분해 리포트
generativelanguage
Gemini AI Studio 의 API 도메인 — 카드 종량, 크레딧 적용 불가

패턴 6 · Karpathy 4 원칙 + Goal-Driven Execution

"LLMs are exceptionally good at looping until they meet specific goals."
— Andrej Karpathy
  1. Think Before Coding — 가정 명시. 모호하면 멈추고 질문
  2. Simplicity First — 요청 없는 추상화·기능 금지
  3. Surgical Changes — 필요한 부분만. 인접 코드 "개선" 금지
  4. Goal-Driven Execution — 검증 가능한 목표 + 통과까지 자율 반복

Transform 패턴: "Fix the bug" → "Write a test that reproduces it, then make it pass"

31명 페르소나 task 발행 SOP. 메모리 _KARPATHY_4.md.

용어
Karpathy
Andrej Karpathy — OpenAI/Tesla 출신 AI 연구자
Goal-Driven Execution
검증 가능한 목표 + 통과까지 자율 반복 — LLM 의 강점 활용
Surgical Changes
외과 수술처럼 필요한 부분만 정확히 수정
SOP
Standard Operating Procedure — 표준 업무 절차서

PART 5

사고와 교훈

자랑할 게 아니라, 우리를 가장 많이 바꾼 것들

사고 #1 · JIINSI 빈 newsletter 발행 (5/9)

증상5/9 새벽 daily summarize 가 빈 newsletter 를 만들어 발행 → 5/10 site validate 도 연쇄 차단
원인Gemini 일시 응답 실패 시 summarizer 가 fallback 없이 빈 stub 저장 → 후속 단계가 그대로 발행
즉시 조치빈 stub 격리 (.bak.empty) → 5/10 통과
근본 패치summarizer.py 에 retry + 비어있으면 abort (commit f766694) → 5/9 재발행 5채널 OK
일반화된 교훈"실패 → fallback 없음 → 빈 결과 발행" 체인을 잘라야 한다. Pre-flight · 비어있으면 abort 가 6-Layer Layer 1
용어
fallback
primary 가 실패했을 때 쓰는 대체 경로
stub
실제 내용 대신 들어가는 임시·빈 자리 (이번 사고의 원흉)
abort
비정상 상태 감지 시 즉시 중단 — 빈 결과를 후속 단계에 흘려보내지 않음

사고 #2 · 본인 IP 자동 차단 (5/10)

증상fail2ban 이 sg-pc1 본인 외부 IP (124.58.146.88) 까지 자동 차단 → 외부에서 SSH/서비스 접근 불가
원인auto_ban 스크립트가 화이트리스트 없이 동작
근본 패치scripts/auto_ban_with_whitelist.sh wrapper — iptables ACCEPT 화이트리스트 + 본인 외부 IP 강제 제외
일반화된 교훈자동화는 "자기 자신을 잘라낼 수 있는 권한" 을 가질 수 있다. 화이트리스트 가드를 default 로
용어
fail2ban
의심스러운 IP 를 자동으로 차단하는 Linux 도구
iptables
Linux 커널의 패킷 필터 방화벽 — ACCEPT/DROP 규칙 등록
화이트리스트
"허용 목록" — 차단 규칙보다 먼저 평가되어 자기 자신 보호
wrapper
원본 명령을 감싸서 가드/로깅을 추가한 스크립트

사고 #3 · claude CLI v2.1.133 Bun panic (5/8)

증상agent-runner 의 모든 페르소나 task 가 rc=-4 (SIGSEGV) 로 동시 실패
원인claude CLI 자동 업데이트 v2.1.133 의 Bun 런타임 panic
진단 단서~/.local/share/claude/versions/ 사이즈 비교 → 신버전 손상 식별
조치이전 안정 버전으로 롤백
일반화된 교훈외부 의존성 자동 업데이트는 관측 가능해야 한다. 메모리 feedback_claude_cli_corrupted_build.md 에 SOP 박제 → 다음 사고 1분 진단
용어
SIGSEGV
Segmentation Fault — 잘못된 메모리 접근 시 OS 가 보내는 시그널 (rc=-11)
Bun
JavaScript·TypeScript 런타임 (Claude CLI 내부에서 사용)
rc=-4
return code — subprocess 가 SIGINT 등으로 종료된 상태
롤백
이전 안정 버전으로 되돌리기

AI 한 명을 키우지 마세요.
31 페르소나를 만드세요.

컨텍스트 동료가 들어오게
  • CLAUDE.md · AGENTS.md · 규칙 파일
  • SessionStart hook 으로 자동 주입
  • 3계층: 전역 → Memory → Skill
회복탄력성 새벽에 안 깨워도 되게
  • Pre-flight · Fail-open · Auto-recovery
  • Health · Observability · Recovery Auto
  • 워치독을 1급 시민으로 (idempotent)
페르소나 사람 한 명이 회사이게
  • md 한 장 = 직원 한 명
  • skills + memory_namespace + 톤
  • verify-done · verify-handoff 자기검증

오늘의 도전장 · 자정 전

  1. 레포 루트에 CLAUDE.md 한 장 (개발 철학 · 보안 · 코딩 규칙)
  2. ~/.claude/.../memory/MEMORY.md 인덱스 + project_*.md 한 개
  3. 운영 중인 cron 하나 골라 워치독 추가 (실패 자동 재시도)

적용 우선순위 · ROI 순

SessionStart hook
   ▼
Memory 인덱스
   ▼
6-Layer 워치독
   ▼
페르소나 (markdown 한 장)

LLM 한 마리는 일을 못합니다.
markdown 31장이 회사가 됩니다.

slides & script: presentations/2026-05-13_harness_engineering/ · github.com/2samgu2 · 강태주 / SGwannabe

Q&A

감사합니다.

🎙 강태주