Overview

01왜 커리큘럼인가 형식 차용

외부의 하네스 공학 커리큘럼(Study Harness · Curriculum v8)은 「Agent = Model + Harness」라는 틀로 이 분야를 14과목짜리 전공 과정으로 정리했다. 대조해 보니 keystone-hub에는 그 14과목 전부에 대응하는 운영 자산이 이미 있었다. 규칙·훅·스킬, 그리고 그것들을 낳은 사고 이력. 그렇다면 같은 커리큘럼을 이론이 아니라 실증으로 다시 쓸 수 있다. 이 리포트가 그 결과물이다.

형식 출처 harness-curriculum.vercel.app (구조 차용, 내용은 keystone 자산) · 대상 layers 소스 실측 · 갱신 수동 스냅샷 (자동화 없음)
Rules
58
universal 35 + personal 23
Hooks
46
layers/*/hooks/*.sh
Skills
112
layers/*/skills/ 디렉토리
과목
14
HE101–HE500 · 2트랙

이 리포트를 읽는 법

  • 과목 카드: 과목마다 ① 교리 한 줄(그 과목이 지키는 원칙) ② keystone 대표 자산 칩 ③ 실증 1건. 실증은 세 종류다: 사고 실제 장애가 규칙을 낳은 경우, 수확 trend-harvester가 외부에서 들여온 경우, 운영 자체 운영 관행이 규칙화된 경우.
  • 스킬 카탈로그와의 관계: 카탈로그는 인벤토리(무엇이 있나), 이 문서는 학습 경로(어떤 순서로, 왜 존재하나). 상호 보완.
  • 자산 칩 표기: 회색 = 00-universal 레이어, 보라 = 20-company-personal(Lucy) 레이어. 각 과목은 현재 canonical 소스(layers)에 실재하는 대표 자산만 표기하며 전수 목록이 아니다.
Prerequisite Map

02이수 체계도 원본 수정판

원본의 2트랙 구조(툴 트랙 201→202 · 컨텍스트 트랙 203→204)는 그대로 가져왔다. 대신 원본 분석에서 발견한 결함 세 가지를 이 판에서 수정했다: 범례 도입, 보안 과목의 컨텍스트 선수 추가, 지식 자산화→장기 하네스 권장 간선.

100 200 300 400 병행 +HE201 권장 · 인젝션은 컨텍스트 신뢰경계 권장 · 지식 위의 장기 하네스 전 과목 HE101 · LLM 물성 HE102 · 에이전트 개론 HE201 · 루프 구현 HE202 · 툴 설계·ACI HE203 · 컨텍스트 이론 HE204 · 컨텍스트 기법 HE301 MCP · 프로토콜 HE305 보안 · 거버넌스 HE304 검증 공학 HE302 지식 자산화 (스킬) HE303 서브에이전트 · 오케스트레이션 HE401 장기 하네스 · 루프 HE402 하네스 설계 철학 HE500 · 캡스톤 · 나만의 하네스
필수 선수 병행 이수 권장 (keystone 추가) 툴 트랙 컨텍스트 트랙 전문
원본에서 바꾼 것 3가지. ① 원본은 "(+HE201)" 표기의 의미(필수인지 병행인지)가 불명확했다. 범례를 도입해 실선/병행/권장을 분리했다. ② 원본은 "300단위는 두 트랙이 합류한 뒤의 응용"이라 썼지만 실제 간선상 두 트랙을 모두 요구하는 300단위 과목이 없었다. 이 판은 그 문장을 버리는 대신 HE203⇢HE305 권장 간선을 추가했다. 프롬프트 인젝션 방어는 툴 게이팅이 아니라 컨텍스트 신뢰경계 문제이기 때문이다(03-security · error-recovery의 신뢰경계 조항이 근거). 합류가 처음으로 완성되는 지점은 HE401이다. ③ HE401(장기 하네스)의 실물인 HANDOFF·ledger는 지식 영속화 위에 서므로 HE302⇢HE401 권장 간선을 추가했다.
Level 100 · Foundations

03기초 · 재료의 물성

모든 규칙은 모델의 물리적 성질에서 나온다. keystone에서 이 층은 규칙 수가 가장 적다. 물성 자체는 규칙이 아니라 규칙들의 존재 이유이기 때문이다.

HE101

LLM 물성

자산 4종 표기

유한한 시야, 확률적 샘플링, 그리고 prefix가 바이트 단위로 같을 때만 적중하는 캐시: 설계는 여기서 출발한다.

prefix-cache-stability
수확 "토큰 비용을 낮추는 건 크기 축소가 아니라 prefix 순서 불변". 기존 토큰 규칙 3종이 전부 SIZE를 줄일 때, ORDER를 보존하는 축이 비어 있음을 외부 수확으로 발견해 규칙화.
HE102

에이전트 개론

자산 5종 표기

에이전트 = 모델 + 하네스. 그리고 사용자도 루프의 일부다: 요청 분류(DOC/UX/DEV/AUTO/BIZ)와 협업 어휘가 그 인터페이스.

agent-collaboration-labelstone-and-honorificcapability-origin-labelslucy-operating-profilelucy-prompting-patterns
운영 "오류(시스템 실패)와 실수(에이전트 판단 위반)를 섞지 않는다". bash가 WSL relay로 잡혀 실패한 건 오류, 그 상태에서 재검증 없이 완료 선언한 건 실수. 이 구분이 어휘 계약으로 고정됨.
Level 200 · Core

04코어 · 루프와 두 트랙

여기서 커리큘럼이 갈라진다. 툴 트랙(권한·호출)과 컨텍스트 트랙(휘발·압축)은 keystone에서도 서로 다른 사고 이력을 갖고 있다.

HE201

루프 구현

자산 5종 표기

루프는 수렴 또는 EXHAUSTED까지 멈추지 않는다. 중간 질문은 루프의 적이고, 재시도는 4회 상한 + 매회 다른 전략.

convergence-loop-no-mid-questionerror-recovery
사고 2026-04-17 리뷰 루프 17차 동안 매 차수 "계속 진행할까요?". 사용자가 17번 개입해야 했다. "1차부터 17차까지 멈추지 않았어야 해"가 무정지 수렴 원칙과 codex-convergence-loop.sh(개입 0 자동화)로 규칙화.
HE202

툴 설계 · ACI

자산 5종 표기

툴 정의는 프롬프트의 일부. 권한은 역할 단위 화이트리스트를 넘어 호출 단위 중재로, 쓰기는 해시 앵커로 결정론화.

capability-broker-runtime
사고 2026-07-08 병렬 세션 중 gh auth switch가 전역 상태를 flip. push가 엉뚱한 계정으로 나감. "일시 전환은 전역 변조가 아니라 per-process env(GH_TOKEN)"로 정본 패턴 교체(#240).
HE203

컨텍스트 이론

자산 3종 표기

컨텍스트는 휘발·유한·비싸다. 그리고 상태와 지식은 다른 물질이다: "다음 주에 다시 적재하면 같은 fact가 나오는가?"

ephemeral-state-not-knowledge
사고 2026-07-04 매 세션 내용이 바뀌는 자동 생성 상태 파일이 fact로 적재돼 global scope 720건 오염. 전 프로젝트 컨텍스트 주입 후보가 노이즈로 덮였다. 휘발성 판별 질문 + 제외 목록(EPHEMERAL_FILE_NAMES)으로 입구 차단.
HE204

컨텍스트 기법

자산 5종 표기

압축은 공짜가 아니다. 절감률과 충실도를 쌍으로 측정하고, 승인·예산·todo 같은 운영 상태는 요약 대상이 아니라 보존 대상.

symbolic-tool-log-memory
수확 "Savings stop before quality does". 압축본 일부를 무압축 baseline과 나란히 재실행해 발산도를 예산으로 묶는 shadow-eval. 압축률만 보고하던 기존 규칙들의 빈칸(압축이 답을 바꿨는가)을 메움.
Level 300 · Advanced

05심화 · 사고가 가장 많았던 층

keystone의 굵직한 장애는 대부분 이 층에서 났다. 서브에이전트·검증·보안이다. 자율성이 커지는 지점마다 규칙이 두꺼워진 이유다.

HE301

MCP · 프로토콜

자산 4종 표기

서버 allowlist는 필요조건일 뿐. 같은 서비스의 MCP와 CLI가 다른 계정일 수 있다: 경계마다 divergence를 의심한다.

mcp-cli-account-divergenceagent-primitive-supply-chain-auditplugin-config-sync-policymulti-scope-cli-enumeration
사고 2026-04-21 Supabase MCP는 회사 org, CLI는 개인 org에 로그인된 상태로 작업. "왜 자꾸 회사계정으로 가?" 이후 양측 계정 사전 확인이 절차화됐고, 설치되는 primitive 자체를 공급망 감사 대상으로 승격.
HE302

지식 자산화 (스킬)

자산 6종 표기

성공 경로는 스킬로 결정화하고, 사용자 교정은 1급 메모리로. 스킬 간 관계는 산문이 아니라 선언된 그래프로 검증한다.

skill-dependency-graph
운영 2026-07-08 스킬 5종에 relations(delegates_to/precedes/depends_on) 선언 + skill-graph-lint.py · dangling 참조·순환을 exit code로 잡는 결정론 게이트 파일럿(#223).
HE303

서브에이전트 · 오케스트레이션

자산 8종 표기

부모 컨텍스트 증가량은 서브에이전트의 작업량이 아니라 digest 크기에 비례해야 한다. 파일 격리는 worktree로, 병합은 entity 단위로, 스케줄링 결정에 LLM 호출 0.

worktree-first-sessions
사고 2026-06-28 · 07-04 같은 체크아웃의 동시 세션이 서로의 브랜치를 전환. 커밋이 남의 브랜치 위에 착지, 백업 태그 + cherry-pick으로 복구(2회 재발). "커밋이 생길 작업은 조건 없이 전용 worktree"로 승격되고 worktree-open/finish 도구가 마찰을 제거. 이 리포트도 그 규칙대로 worktree에서 작성됐다.
HE304

검증 공학

자산 11종 표기

자기 채점은 구조적으로 차단한다. 개선 신호(train)와 채택 게이트(holdout)는 다른 메트릭이어야 하고, 산출물의 수치는 검증된 값만, 발견은 N/N 재현을 통과해야 사실이 된다.

completion-verificationverified-value-registryreproducibility-gated-discoveryself-improvement-holdout-eval-gateqa-evidence-formatqa-screenshot-requiredqa-browser-test-required
사고 2026-04-17 push가 5연속 차단: 증거 파일 부재 → 포맷 오류 → 도구 오해 → mtime 초과 → TC 수 불일치(17/17 vs plan 20). 전수 재실행(85/85) 후에야 통과했고, 이 마찰이 qa-evidence-stamp.sh 원커맨드와 "N<M 미전수 거부·acceptance 기록 필수" 계약으로 응고.
HE305

보안 · 거버넌스

자산 8종 표기

모델이 아무리 확신해도 게이트는 코드다. 가역성(R0/R1/R2)이 최종 판정이고, 게이트와 자가테스트 자신도 공격면이다.

agent-policy-and-execution-sandboxagent-spawning-hook-recursion-guardself-test-payload-containmentsecret-scanning-depthsecurity-patternsautonomous-security-triage-harness
사고 2026-07-11 pre-push 훅이 spawn한 QA 에이전트가 QA 후 스스로 push → 훅 재트리거 → 54분 무한재귀. claude 100+ · node 300+ · 스왑 14.7GB/16GB 데스 스파이럴. env 가드 단독으론 불충분함이 실증돼 4중 방어(재귀 가드 · 유발동작 능력 제거 · 동시실행 상한 · fail-closed)로 규칙화. 나흘 뒤엔 자가테스트의 fail-open 페이로드가 canonical 훅을 덮는 별개 사고(07-15)가 sandbox-first 격리 계약을 추가했다.
Level 400 · Professional + Capstone

06전문 · 시간을 견디는 하네스

HE401

장기 하네스 · 루프

자산 7종 표기

훅이 살아있다는 증거는 파일 존재가 아니라 발화 기록이다. 다음 세션은 기억 없는 신입이다. HANDOFF와 ledger가 그를 위한 인수인계다.

harness-liveness-guardsession-resume-context-recoveryauditable-agent-evolution-ledger
사고 실측 2026-07-04·05 훅 1/38 사망이 비율 임계(30%)에 안 걸려 30일 무증상. 근인은 clean-env PATH의 node 부재 + fail-open soft-pass. 별건으로 memory-bank 네이티브 모듈 ABI 불일치가 읽기 경로만 11일 죽였다. executor smoke + critical group + e2e 프로브로 "정적 검사 통과 ≠ 살아있음"을 게이트화.
HE402

하네스 설계 철학

자산 5종 표기

SOFT로 시작해 실측이 쌓이면 HARD로 승격한다. 검증은 위험도에 비례해 배분하고, 에이전트는 결론을 공급하지 않고 보조한다.

soft-to-hard-promotionrule-author-strict-exceptionskarpathy-coding-principlesmy-role-override
운영 2026-07-10 "grep 게이트 맹목 승격 금지" 개정. 2회 FAIL이면 승격하되, carve-out을 먼저 설계하고 L1(경고)로 관측한 뒤에만 차단으로. false-positive가 곧 작업 차단인 게이트일수록 승격 절차가 보수적이어야 한다는 철학의 성문화.
HE500

캡스톤 · 나만의 하네스

실물

원본 커리큘럼의 졸업 과제가 "나만의 하네스 만들기"라면, keystone-hub가 그 답안지의 실물이다.

auditable-agent-evolution-ledgerapply.sh · 4프로파일(2 OS × 2 소속) × 3머신adapter export · CLAUDE.md/.cursor/AGENTS.md 생성evolution-ledger · 변경 감사 추적trend-harvester · 수확은 자동, 채택은 사람
운영 규칙 58종의 다수가 실제 사고·마찰에서 태어났고(각 규칙의 "근거" 섹션이 그 출생기록), 이 리포트를 서빙하는 workbench와 이 리포트를 작성한 worktree 절차까지 전부 그 규칙 위에서 돈다. 커리큘럼과 캡스톤이 자기참조로 닫힌다.
Coverage

07커버리지 · 두께의 의미

과목별 대표 자산 밀도를 놓고 보면 패턴이 하나 보인다. 과목의 두께는 이론의 중요도가 아니라 흘린 피의 양이다.

과목대표 자산밀도해석
HE304 검증11종최다거짓 PASS·조기 완료 선언이 가장 잦은 실패 모드였다는 증거
HE303 오케스트레이션 / HE305 보안각 8종두터움자율성이 커지는 지점(병렬 세션·훅·spawn)마다 사고가 남
HE401 장기 하네스7종두터움죽은 훅·끊긴 인수인계는 조용히 실패한다 · 관측이 규칙이 됨
HE202 · HE204 · HE302각 5~6종보통트랙 본체 · 꾸준한 수확·운영 개선의 영역
HE101 · HE102 · HE203각 3~5종얇음물성·개론은 규칙보다 문서(HARNESS_ENGINEERING 등)가 담당
표기 기준. 위 수치는 이 리포트의 카드에 표기한 대표 자산 수다(과목당 1규칙 = 1주배정). 전체 58종 규칙의 전수 배정표가 아니며, 얇은 과목이 "덜 중요하다"는 뜻도 아니다. 커리큘럼의 다음 확장 지점(HE101·HE203의 이론 문서화)을 가리키는 지도에 가깝다.
Lifetime Map

08무엇이 어디에 사는가 · keystone 실측판

원본 커리큘럼의 수명 분류표를 keystone의 실제 경로로 다시 그렸다. ephemeral-state-not-knowledge의 판별 질문("다음 주에 다시 적재하면 같은가?")이 이 표의 경계선이다.

수명keystone 실물
컨텍스트 창휘발대화·서브에이전트 탐색 · 세션이 끝나면 소멸. 살아남아야 할 운영 상태(승인 토큰·예산·todo)는 파일로 탈출시킨다 (survival set)
파일시스템영속layers/ 소스 → apply.sh → ~/.claude 런타임 (규칙 58 · 훅 46 · 스킬 112), sessions/ HANDOFF, memory-bank facts
하네스 프로세스결정론PreToolUse·Stop 훅, push/QA 게이트, lint · "모델이 확신해도 게이트는 코드"가 사는 곳
격리 컨텍스트격리.claude/worktrees/ + 서브에이전트 · 탐색은 안에서 태우고 밖으로는 digest만 회수
Sources & Boundary

09출처 · 경계

출처

  • 형식 참조: harness-curriculum.vercel.app (Study Harness · Curriculum v8): 14과목 체계·2트랙 이수 체계도·수명 분류표의 구조를 차용. 내용(자산·사고·수치)은 전부 keystone-hub 자체 자산이다.
  • 수치: 2026-07-23 layers 소스 실측: universal rules 35 · personal rules 23 · hooks 46 · skill 디렉토리 112. 런타임(~/.claude) 카운트는 플러그인 포함으로 이보다 크다. 스킬 카탈로그 리포트(139종)와 기준이 다름.
  • 사고 사례: 각 규칙 파일의 "근거" 섹션에서 날짜·경위를 그대로 인용. 이 리포트에서 새로 만든 사실은 없다.

경계

  • 공개판 주기 · 이 글은 스크럽·발행 게이트를 거쳐 공개 폴더로 승격된 판이다. 사고 경위는 시스템 내부 참조 수준으로만 남겼다.
  • 수동 스냅샷 · 규칙이 늘어도 이 문서는 자동 갱신되지 않는다. 재발행 시점 후보: 규칙 ±10종 변동 또는 다음 대형 사고.
  • v1 후보(미착수) · ① layers 스캔으로 과목-규칙 매핑을 생성하는 빌드 스크립트 ② 과목별 3단계 사다리(스토리→학부→연구) ③ 전수 배정 매트릭스.