1 출발 질문
이전 포스트 Prompt · Context · Harness Engineering — 세 층위의 구분과 포함 관계 에서 세 층위를 동심원으로 정의했다. 그 다음 자연스럽게 나오는 질문이 있다.
“그럼 이 블로그 프로젝트의 AGENT_GUIDE 체계는 어느 층에 속하는가?”
표면만 보면 “skill-based prompt engineering” 이다. 그런데 AGENT_GUIDE 가 실제로 하는 일을 뜯어보면 Prompt 층에 국한되지 않는다. 라우팅 테이블, Phase 프로토콜, info-search 3-Layer 병렬 탐색, 절대 규칙의 중복 배치 등은 Context Engineering 이다. 반면 Auto-compaction 이나 Protected zone 같은 Harness Engineering 은 Claude Code·Gemini CLI 의 기본값을 그대로 쓴다.
이 글은 AGENT_GUIDE 체계를 3 층 관점으로 해부하고, 그 과정에서 두 가지 개념을 정리한다.
- Harness-aware Context Engineering — 하네스를 만들지 않으면서도 의식하는 방어적 설계
- Cross-cutting concern — Skill-based PE 가 여러 층을 횡단하는 현상을 소프트웨어 공학 용어로 정식화
마지막으로 아키텍트 (설계자) 와 아키텍처 (설계 결과물) 를 구분해 이 프로젝트의 설계 구조를 명명한다.
2 AGENT_GUIDE 가 실제로 하는 일 — Prompt + Context 두 층
AGENT_GUIDE 체계의 각 활동을 3 층위에 매핑하면 다음과 같다.
| 활동 | 해당 층 |
|---|---|
| 각 skill 파일 안의 지시 (한다 체, Self-Check 항목, 루브릭 등) | Prompt |
| 스타일 규칙 (수동 번호 금지, 이모지 금지, YAML 필수 필드) | Prompt |
| 튜터 루브릭 (writing-rubric-lv{N}.md, sql-weakness.md) | Prompt |
| AGENT_GUIDE.md 의 라우팅 테이블 — 어느 커맨드에 어느 가이드를 로드할지 | Context |
| Phase 0~4 프로토콜 — 가이드를 어떤 순서로 읽을지 | Context |
| info-search.md 3-Layer 병렬 탐색 — 무엇을 먼저 보여줄지 | Context |
| 절대 규칙 5 개를 CLAUDE.md + AGENT_GUIDE.md + CORE 에 중복 배치 | Context |
| CP-1/CP-2/CP-3 체크포인트 — “읽었음을 명시 출력하라” | Context |
| common-mistakes.md 에 오류 패턴 누적 | Context (메모리 전략) |
Prompt 층 — 답변의 형식·톤·품질 기준을 정하는 지시문. skill 파일 내부의 모든 구체적 지시가 여기 속한다.
Context 층 — 세션마다 모델이 무엇을·언제·얼마나 보게 할지 결정하는 규칙. 이게 바로 AGENT_GUIDE 체계의 핵심 설계 영역 이다.
그래서 정확한 명명: 이 프로젝트는 Skill-based Prompt + Context Engineering 을 한다. “prompt” 라는 이름 때문에 prompt 층만 다루는 것처럼 들리지만, 실제로는 Context 층이 설계 비중의 절반 이상이다.
3 AGENT_GUIDE 가 하지 않는 일 — Harness Engineering 은 차용
반대로 Harness 층의 메커니즘은 전부 남이 만든 것을 가져다 쓴다.
| Harness 활동 | 이 프로젝트에서 하는가 | 어디서 오는가 |
|---|---|---|
| Auto-compaction 알고리즘 설계 | 안 함 | Claude Code 내부 로직 |
| Tool result lifecycle 정책 결정 | 안 함 | 하네스 기본값 |
| Protected zone 구현 | 안 함 | Gemini CLI 가 내부적으로 처리 |
| 응답 길이 제약 설정 | 안 함 | Claude Code 시스템이 25/100 단어 강제 |
| Skill 로딩 정책 (eager vs lazy) | 안 함 | Claude Code Skill tool 구현 |
| Subprocess 인터페이스 설계 | 안 함 | claude, gemini CLI 규약 |
| Tool loop 정책 | 안 함 | 하네스 기본 |
이 프로젝트는 Harness Engineering 을 하지 않는다. Claude Code, Gemini CLI 라는 이미 만들어진 하네스 위에 얹어 쓴다. 하네스 자체의 거동은 블랙박스 그대로 두고, 그 위에서 Prompt + Context 만 설계한다.
이게 옳은 선택인 이유는 명확하다. Harness Engineering 은 런타임·컴파일러 수준의 엔지니어링 으로, Anthropic·GitHub·Google 같은 대기업 팀이 전담하는 영역이다. 개인 블로그 프로젝트가 손대면 과잉 엔지니어링이 된다.
4 이 프로젝트의 정확한 위치
3 층 동심원에 이 프로젝트의 설계 범위를 표시하면 다음과 같다.
┌─────────────────────────────────────────────┐
│ Harness (Claude Code / Gemini CLI) │ ← 차용 (남이 만든 것)
│ │
│ ┌─────────────────────────────────────┐ │
│ │ Context Engineering │ │ ← 이 프로젝트가 설계
│ │ (AGENT_GUIDE 라우팅, Phase 0~4, │ │
│ │ info-search 3-Layer, │ │
│ │ 중복 배치·CP 체크포인트 전략) │ │
│ │ │ │
│ │ ┌───────────────────────────┐ │ │
│ │ │ Prompt Engineering │ │ │ ← 이 프로젝트가 설계
│ │ │ (skill 파일 지시문, │ │ │
│ │ │ 한다 체, 루브릭, │ │ │
│ │ │ 스타일 규칙) │ │ │
│ │ └───────────────────────────┘ │ │
│ └─────────────────────────────────────┘ │
└─────────────────────────────────────────────┘
설계 영역: 안쪽 두 층 차용 영역: 가장 바깥 하네스 층
5 Harness-aware Context Engineering — 새로운 패턴 이름
여기서 흥미로운 점이 있다. 이 프로젝트는 Harness Engineering 을 하지 않지만, 하네스의 한계를 깊이 의식하고 방어한다.
5.1 구체 방어 기제 3 가지
경고 문구 내재화 — CLAUDE.md 자체에 다음 문구가 있다:
“Claude Code 는 규칙을 자체 요약·압축하거나, 단계를 건너뛰는 경향이 있다.”
이건 하네스의 압축 정책을 사용자 가이드에 드러내서 모델이 자기 경향을 자각하도록 만든 방어적 서술이다.
절대 규칙 5 개의 중복 배치 — “한다 체, 수동 번호 금지, Category GUIDE 로드, index 업데이트, 이모지 금지” 5 개 규칙이 다음 세 곳에 동일하게 인용 된다:
CLAUDE.md상단AGENT_GUIDE.md(핵심 규칙 섹션)guides/AGENT_GUIDE_CORE.md절대 규칙 5 개 섹션
이건 정보 설계 원칙상 “redundancy 를 제거하라” 에 위배된다. 그러나 의도된 redundancy 이다 — 하네스의 auto-compaction 이 일부 파일 내용을 요약해도, 세 곳 중 최소 한 곳은 살아남을 확률을 높이는 방어적 중복.
CP-1/CP-2/CP-3 출력 의무 — “가이드 로드 확인 / Step 명시 / Self-Check 출력” 세 체크 포인트는 모델이 읽었다는 사실만 기억하지 않고 읽은 내용을 응답 텍스트로 출력하게 강제한다. 출력된 텍스트는 사용자 메시지 스트림에 남아 auto-compaction 으로 사라지기 어렵다. 즉 모델 응답 자체를 정보 보존 매체로 활용 한다.
5.2 패턴 명명
이 세 기제의 공통점은 “하네스의 거동을 고칠 수 없으므로, 그 거동을 예측하고 Context 설계 로 방어” 한다는 것이다. 이런 설계 패턴에 이름이 필요하다.
Harness-aware Context Engineering — 하네스 내부 메커니즘을 직접 만들지 않지만, 그 메커니즘의 한계·편향·부작용을 예측해 Context 층에서 방어적으로 설계하는 접근.
비유하자면 운영체제를 만들지 않지만, 운영체제의 메모리 관리 정책을 알고 있어서 자기 프로그램이 swap out 되지 않도록 hot path 를 inline 으로 쌓는 프로그래머와 같다. OS 엔지니어 는 아니지만 OS-aware 프로그래머다.
6 Skill-based PE 는 어느 층인가 — Cross-cutting Concern
여기서 독자가 혼란을 느끼는 지점이 있다.
“그럼 Skill-based Prompt Engineering 은 Prompt 층의 기법인가? 아니면 Context 층? 둘 다?”
스킬 하나를 만들 때 실제로 무슨 일이 벌어지는지 해부해보자.
| 스킬 제작 활동 | 해당 층 |
|---|---|
guides/qa.md 의 지시문 작성 (답변 구조·톤) |
Prompt |
guides/qa.md 의 Step 1~5 검색 절차 설계 |
Context |
AGENT_GUIDE.md 라우팅 테이블에 /qa 행 추가 |
Context |
.claude/commands/qa.md / .gemini/commands/qa.toml 등록 |
Harness (CLI 호출 규약) |
| 스킬 메타데이터 (description) 작성 | Context (라우팅 결정 정보) |
한 기법이 세 층 모두를 건드린다. 이 현상을 정확히 지칭하는 소프트웨어 공학 용어가 있다.
6.1 Cross-cutting Concern (횡단 관심사)
소프트웨어 공학에서 여러 계층에 걸쳐 구현되는 관심사를 cross-cutting concern 이라 한다. 전통적 예시:
Presentation │ Business │ Data
──────────────┼────────────┼──────
로깅 ──────┼──── 로깅 ──┼── 로깅 ← cross-cutting
보안 ──────┼──── 보안 ──┼── 보안 ← cross-cutting
트랜잭션 ──┼─── 트랜잭션 ┼─ 트랜잭션 ← cross-cutting
로깅이 presentation 층 “만의” 관심사도, business 층 “만의” 관심사도 아니듯이. 어느 한 층에 깔끔히 속하지 않고 모든 층에 걸쳐 일관되게 구현돼야 한다.
LLM 엔지니어링의 3 층 (Prompt / Context / Harness) 에 같은 구조를 적용하면:
Prompt │ Context │ Harness
────────┼───────────┼─────────
Skill-based PE ────┼────────── ← cross-cutting
ReAct ─────────────┼────────── ← cross-cutting (Prompt + Harness)
MCP ───────────────┼────────── ← cross-cutting (Context + Harness)
Memory system ─────┼────────── ← cross-cutting (Context + Harness)
6.2 정의
Skill-based Prompt Engineering 은 Prompt·Context·Harness 3 층을 횡단하는 cross-cutting implementation pattern 이다.
이름에 “Prompt” 가 있어서 Prompt 층 안의 기법으로 보이지만, 실제로는 여러 층의 설계 결정을 하나의 패턴으로 묶은 것이다. 스킬 한 개 만들 때 Prompt·Context·Harness 모두에 작업이 발생하는 이유가 여기 있다.
6.3 왜 이 용어가 중요한가
“Cross-cutting 이다” 라고 명명하면 세 가지 혼동이 한 번에 풀린다.
- “Skill-based PE 가 Prompt + Context + Harness 를 모두 포함하나?” — 아니다. 포함 관계가 아니라 관통 관계다. 로깅이 presentation 을 “포함” 하지 않듯이
- “그럼 Skill-based PE 를 공부하면 세 층을 다 알게 되나?” — 아니다. 각 층의 관심사 중 일부 만 건드릴 뿐, 각 층 전체를 다루지 않는다
- “어느 층에서 공부해야 하나?” — 세 층의 기초 개념을 먼저 잡은 뒤, cross-cutting 관점에서 통합. 개별 층을 건너뛰면 안 된다
7 LLM 엔지니어링의 다른 Cross-cutting Concern 예시
Skill-based PE 외에도 3 층을 횡단하는 기법이 여럿 있다.
| 기법 | 관여하는 층 | 횡단하는 이유 |
|---|---|---|
| Skill-based PE | Prompt + Context + Harness | 스킬 파일 내용 (Prompt), 로딩 정책 (Context), CLI 호출 규약 (Harness) |
| ReAct | Prompt + Harness | 추론·행동 패턴 (Prompt), tool loop (Harness) |
| MCP (Model Context Protocol) | Context + Harness | 도구 스키마 주입 (Context), 프로토콜 런타임 (Harness) |
| Memory system | Context + Harness | 저장은 Harness, 활용 전략은 Context |
| Tool use | Context + Harness | 도구 스키마 (Context), 실행 loop (Harness) |
| RAG | Context (거의 전부) | 드물게 Cross-cutting — 대개 Context 단일 |
| Auto-compaction | Harness | 단일 층 — Cross-cutting 아님 |
| Few-shot | Prompt | 단일 층 — Cross-cutting 아님 |
판단 기준: 어느 한 층만 손봐서 구현이 끝나면 단일-층 기법, 둘 이상 층을 동시에 건드려야 구현이 완결되면 cross-cutting.
이 분류는 기법의 학습 순서에도 영향을 준다. 단일-층 기법은 해당 층 기초를 배운 뒤 바로 접근 가능하지만, cross-cutting 은 관여하는 모든 층의 기초를 먼저 잡아야 이해된다.
8 아키텍트 vs 아키텍처 — 명명의 구분
마지막으로 정리할 구분이 있다.
아키텍트 = 설계자 (사람, 의사결정자)
아키텍처 = 그 설계자가 내린 결정이 만든 구조물
이 프로젝트에서:
- 아키텍트 = 나 (프로젝트 설계자)
- 아키텍처 = AGENT_GUIDE 체계 전체
8.1 이 프로젝트의 아키텍처 구성
Architecture: AGENT_GUIDE 체계
│
├── [Harness 선택 결정] ← 설계자가 선택, 구현은 차용
│ "Claude Code + Gemini CLI 병용"
│
├── [Context 설계] ← 설계자가 직접 설계
│ ├── CLAUDE.md (Claude Code 진입점)
│ ├── GEMINI.md (Gemini CLI 진입점)
│ ├── AGENT_GUIDE.md (라우팅 테이블)
│ ├── guides/AGENT_GUIDE_CORE.md (항상-온 공통 규칙, CP-1~3)
│ ├── guides/info-search.md (3-Layer 병렬 탐색)
│ ├── guides/common-mistakes.md (실패 패턴 누적)
│ └── 절대 규칙 5 개 중복 배치 전략
│
├── [Prompt 설계] ← 설계자가 직접 설계
│ ├── guides/write-post.md (/write 스킬)
│ ├── guides/retrofit-post.md (/fix 스킬)
│ ├── guides/writing-tutor.md (/writing 스킬)
│ ├── guides/writing-rubric-lv{N}.md (루브릭)
│ ├── guides/sql-tutor.md (/sql 스킬)
│ ├── ... (총 12 skill 가이드)
│ └── docs/blog/posts/*/GUIDE.md (카테고리별 스타일)
│
└── [Cross-cutting Pattern] ← 설계자가 구조로 채택
Skill-based PE — 위 3 층을 관통하는 구현 패턴
.claude/commands/*.md + .gemini/commands/*.toml8.2 아키텍트의 역할
- “Claude Code + Gemini CLI 를 병용한다” 는 Harness 선택 결정
- “절대 규칙을 세 파일에 중복 배치해 압축을 방어한다” 는 Context 설계 결정
- “한다 체를 강제하고 수동 번호를 금지한다” 는 Prompt 설계 결정
- “새 스킬은
.claude/commands/*.md+.gemini/commands/*.toml쌍으로 추가한다” 는 Cross-cutting 규약 결정
이 결정들이 누적돼 아키텍처라는 구조물이 된다.
8.3 아키텍처의 정의
아키텍처는 파일 구조·라우팅 규칙·Phase 프로토콜·중복 배치 전략·스킬 시스템 등이 합쳐진 체계 다.
아키텍트가 바뀌면 (예: 다른 설계자가 이 프로젝트를 맡으면) 아키텍처가 바뀔 수 있다. 반대로 아키텍처가 문서화돼 있으면 (이 글처럼) 새 아키텍트가 그 체계를 유지·확장할 수 있다. 이게 아키텍처 문서화 의 가치다.
9 왜 이 해부가 중요한가
이런 해부를 왜 하나.
9.1 1. 유지보수 판단이 쉬워진다
“CP-3 를 제거하자” 는 제안이 오면:
- 해부 없이: “CP-3 가 뭔데? 언제 도입됐지?” 에서 시작
- 해부 있으면: “CP-3 는 Context 층의 정보 보존 전략이다. 제거하면 auto-compaction 후 Self-Check 가 누락될 위험이 커진다. 대안으로 다른 방어 기제가 필요한가?” 로 즉시 판단
유지보수 결정이 층위 관점에서 평가되면 체계 일관성이 유지된다.
9.2 2. 확장 방향이 예측 가능해진다
“MCP 지원 추가” 같은 확장이 오면:
- MCP 는 Context + Harness 의 cross-cutting 이다 (위 표 참조)
- 이 프로젝트는 Harness 를 차용 한다 → MCP 의 Harness 쪽은 Claude Code / Gemini CLI 의 MCP 구현에 의존
- Context 쪽만 우리가 설계 — MCP 서버 목록, 스킬-서버 매핑 규약 추가
확장의 범위와 책임 경계가 명확해진다.
9.3 3. 다른 프로젝트에 이식 가능한 원리가 추출된다
“이 프로젝트 구조가 왜 잘 작동하나” 의 답을 구체 파일명 없이 서술할 수 있다:
- Prompt + Context 는 직접 설계
- Harness 는 성숙한 CLI 차용
- Harness-aware 방어 기제 (중복 배치, CP 체크포인트) 삽입
- 새 기능은 cross-cutting 스킬 패턴으로 추가
이 네 원리만 가져가면 다른 프로젝트도 유사한 품질의 AGENT_GUIDE 체계를 구축할 수 있다.
10 결론
이 블로그 프로젝트의 AGENT_GUIDE 체계는 Prompt + Context 두 층을 직접 설계하고 Harness 는 차용하는 구조다. 표면적으로 “skill-based prompt engineering” 이라 부르지만, 실제로는 Context 층 설계가 비중의 절반 이상이며, Skill-based PE 자체는 cross-cutting concern 으로 세 층을 관통한다.
핵심 용어 정리:
- Harness-aware Context Engineering — 하네스를 만들지 않지만 그 한계를 의식해 방어적으로 Context 를 설계
- Cross-cutting concern — 하나의 기법이 여러 층을 관통하는 구현 패턴 (Skill-based PE, ReAct, MCP, Memory system 등)
- 아키텍트 vs 아키텍처 — 설계자 (사람) vs 설계 결과물 (구조)
이 구분은 유지보수·확장·이식 판단의 기초가 된다. “이 규칙을 고치면 뭐가 깨지나” 가 층위 관점 에서 답 가능해지고, “이 기능을 추가하려면 어디를 건드리나” 가 cross-cutting 매핑 으로 답 가능해진다.
11 관련 주제
전제 개념
- Prompt · Context · Harness Engineering — 세 층위의 구분과 포함 관계
- Claude Code vs Copilot CLI — 하네스 설계 차이와 Task 선택 가이드
스킬 시스템
시스템 프롬프트 설계
12 참고문헌
12.1 Cross-cutting concern 개념 (소프트웨어 공학)
- Kiczales, G. et al. (1997). Aspect-Oriented Programming. ECOOP.
- Laddad, R. (2009). AspectJ in Action: Enterprise AOP with Spring Applications. Manning.
12.2 3 층 프레임 (LLM 엔지니어링)
- Anthropic. (2025). Claude Code Documentation. https://docs.claude.com/claude-code
- Karpathy, A. (2024). Context Engineering Threads. X/Twitter.
- Anthropic. (2024). Model Context Protocol (MCP) Specification. https://modelcontextprotocol.io
12.3 관련 기법
- Yao, S. et al. (2022). ReAct: Synergizing Reasoning and Acting in Language Models. arXiv:2210.03629.
- Packer, C. et al. (2023). MemGPT: Towards LLMs as Operating Systems. arXiv:2310.08560.