에이전틱 디자인 품질 제어
Codex와 Claude Code가 자주 만드는 평균적 UI 편향을 제어하고 더 높은 품질을 끌어내는 agent engineering 방법
Codex나 Claude Code로 UI를 만들다 보면 특유의 “AI가 만든 것 같은 화면”이 반복됩니다.
문제는 에이전트가 디자인을 못해서가 아니라, 대부분의 프로젝트가 디자인 품질을 제어하는 surface를 충분히 제공하지 않기 때문입니다.
이 장은 DESIGN.md, AGENTS.md, CLAUDE.md, 예제 세트, 시각 평가 루프를 활용해
에이전트가 만드는 기본적인 평균값 디자인에서 벗어나는 방법을 정리합니다.
에이전트가 자주 만드는 특유 디자인
| 패턴 | 실제로 보이는 결과 | 왜 자주 나오나 |
|---|---|---|
| glossy gradient 남용 | hero, 카드, 배경이 모두 반짝이는 SaaS 마케팅 페이지처럼 보임 | 학습 데이터에 많은 "예쁜" 랜딩 패턴이 기본값으로 작동 |
| 과한 radius / shadow | 카드가 둥글고 떠 있으며 계층보다 장식이 먼저 보임 | 안전한 modern UI 클리셰에 수렴 |
| CTA 과포화 | 한 화면에 강조 버튼이 너무 많아 위계가 흐려짐 | 중요도 기준보다 "행동 유도" 패턴을 우선 학습 |
| 정보보다 장면 우선 | 실제 제품 화면인데 마케팅 섹션처럼 넓고 느슨하게 구성 | density와 운영 화면 철학이 지시되지 않음 |
| 브랜드 어휘 부재 | 어느 제품에나 들어갈 수 있는 평균적 devtool UI가 나옴 | 토큰은 있어도 look and feel 문서가 없거나 약함 |
이건 Codex나 Claude Code만의 문제가 아니라, 시각 제약이 약한 agentic coding workflow 전체의 기본 편향에 가깝습니다.
왜 이런 편향이 생기는가
| 원인 | 기술적 설명 | 교정 방식 |
|---|---|---|
| brief가 너무 짧음 | “대시보드 만들어줘” 수준 지시로는 미학적 제약이 거의 없음 | 목표, density, 금지선, 브랜드 성격을 별도 문서화 |
| 상위 디자인 문서 부재 | token/component spec만으로는 화면 분위기까지 고정되지 않음 | DESIGN.md를 상위 시각 규칙 문서로 추가 |
| 반례가 없음 | 모델은 좋은 예보다 평균적인 예를 더 자주 재현 | anti-example과 do/don't를 함께 제공 |
| one-shot 생성 | 첫 결과가 평가 없이 바로 구현으로 굳어짐 | screenshot critique와 patch 루프 도입 |
| 평가 기준이 코드 중심 | lint/typecheck는 통과하지만 화면 품질은 측정하지 않음 | 시각 리뷰 rubric과 visual diff를 도입 |
품질을 제어하는 5개의 surface
핵심은 프롬프트 하나를 잘 쓰는 것이 아니라, 에이전트가 읽는 입력과 평가 루프를 구조적으로 설계하는 것입니다.
1. DESIGN.md로 미학적 기본값을 덮어쓰기
DESIGN.md는 에이전트가 "이 화면이 어떤 성격이어야 하는가"를 읽는 상위 문서입니다.
여기에 do/don't가 약하면 에이전트는 다시 평균적 SaaS 미학으로 돌아갑니다.
## Overview
신뢰감 있고 밀도 높은 운영 화면.
장식보다 정보 구조를 우선하며, 과한 gradient나 유리질 효과를 사용하지 않는다.
## Do's and Don'ts
- Do: border contrast와 typography hierarchy로 깊이를 만든다
- Do: 한 화면의 primary CTA는 하나로 제한한다
- Don't: glossy gradient, neon glow, glassmorphism 사용
- Don't: 카드마다 다른 radius와 shadow를 섞지 않는다
- Don't: marketing hero 같은 과도한 whitespace를 운영 화면에 적용하지 않는다
## Layout Principles
- 표, 리스트, 메트릭 카드의 정보 밀도를 유지한다
- 섹션 간 위계는 색보다 spacing과 type scale로 구분한다좋은 DESIGN.md는 취향 선언문이 아니라,
에이전트가 피해야 할 시각적 습관까지 명시한 문서입니다.
2. AGENTS.md와 CLAUDE.md로 구현 행동을 제한하기
DESIGN.md가 look and feel을 정한다면,
AGENTS.md와 CLAUDE.md는 실제 구현 행동을 제한합니다.
Codex용 AGENTS.md
Codex는 작업 전에 AGENTS.md를 읽기 때문에,
디자인 품질 기준도 구현 규칙으로 올려두는 편이 효과적입니다.
## UI Quality Guardrails
- 기본 디자인 시스템 컴포넌트 외의 임의 스타일링을 우선하지 말 것
- gradient, blur, glow는 DESIGN.md에 명시된 경우에만 사용
- landing page 미학을 제품 화면에 가져오지 말 것
- 정보 위계는 color보다 spacing, type scale, grouping으로 먼저 해결
- 첫 구현 후 반드시 screenshot 기준 self-review를 수행Claude Code용 CLAUDE.md
Claude Code는 CLAUDE.md, skills, optional output style을 함께 활용하는 편이 좋습니다.
## Design Review Loop
1. 먼저 현재 요청이 marketing page인지 product UI인지 분류한다
2. DESIGN.md와 component spec를 읽고 layout skeleton을 잡는다
3. 구현 후 screenshot 기준으로 아래 항목을 점검한다
- primary CTA 개수
- radius/shadow 일관성
- 정보 밀도
- token fidelity
4. 어긋난 항목만 좁게 수정한다여기서 핵심은 "예쁘게 만들어라"가 아니라, 어떤 순서와 체크리스트로 구현할지를 명시하는 것입니다.
3. 자유도를 줄이는 제약 레이어
미적 품질은 취향의 문제가 아니라, 대부분 선택 가능한 조합 수를 줄이는 문제입니다.
| 제약 레이어 | 예시 | 효과 |
|---|---|---|
| token constraint | primary, surface, outline, radius-md만 허용 | 장식적 임의값 감소 |
| component API | Button variant 4개만 허용 | 강조 방식 일관성 확보 |
| layout primitives | PageHeader, MetricGrid, SectionCard 등 제공 | 화면 구조가 랜덤하게 흔들리지 않음 |
| copy system | 표준 버튼/상태 문구 키 사용 | 텍스트 톤 드리프트 감소 |
// Bad: 에이전트가 임의 스타일을 직접 조합
<div className="rounded-[28px] bg-gradient-to-br from-cyan-400 to-blue-600 shadow-2xl" />
// Better: 제한된 시스템 조합만 사용
<Card variant="metric">
<MetricCard tone="default" />
</Card>고품질 디자인은 자유로운 생성보다, 잘 설계된 제약 안에서의 생성에서 나옵니다.
4. 예제와 반례 세트 만들기
에이전트는 좋은 예제만큼이나 나쁜 예제를 통해서도 빨리 교정됩니다.
design-control/
├── good/
│ ├── dashboard-density.md
│ └── table-layout.md
├── bad/
│ ├── over-glossy-marketing.md
│ └── card-soup.md
└── review-rubric.md| 문서 | 역할 |
|---|---|
good/* | 우리가 원하는 hierarchy, density, restraint를 보여줌 |
bad/* | 에이전트가 자주 빠지는 안티패턴을 명시 |
review-rubric.md | 평가 항목과 점수 기준을 고정 |
특히 bad/*는 효과가 큽니다.
모델은 “무엇을 하지 말아야 하는가”가 적혀 있을 때 훨씬 안정적으로 수렴합니다.
5. screenshot 기반 평가 루프
Codex 공식 use case도 front-end design에서 visual checks를 강조합니다. 코드가 아니라 화면을 기준으로 반복해야 품질이 올라갑니다.
최소 평가 rubric
| 항목 | 0점 | 1점 | 2점 |
|---|---|---|---|
| 브랜드 적합성 | generic SaaS look | 일부 반영 | 우리 제품 어휘가 분명함 |
| 위계 | CTA/정보 우선순위 혼란 | 대체로 맞음 | 스캔 순서가 명확 |
| 밀도 | 너무 느슨하거나 과밀 | 일부 어색 | 화면 성격과 맞음 |
| 장식 절제 | gradient/shadow/radius 과다 | 부분 과다 | 규칙 안에서 절제됨 |
| token fidelity | 임의값 다수 | 일부 이탈 | 시스템 조합만 사용 |
agent critique 프롬프트 예시
[Task]
현재 구현된 화면을 DESIGN.md, component spec, screenshot 기준으로 리뷰해줘.
[Fail conditions]
- glossy gradient / glow / glass effect가 등장하면 실패
- primary CTA가 2개 이상이면 실패
- 정보 화면인데 marketing hero처럼 whitespace가 과하면 실패
- token spec 밖의 임의 radius/shadow/color가 있으면 실패
[Output]
1. rubric 점수표
2. 어긋난 항목 5개 이내
3. 각 항목별 targeted patch 제안
4. 전체 리라이트 금지이 루프의 목적은 "다시 만들어"가 아니라 어디가 어긋났는지 좁게 진단하고 패치하는 것입니다.
Codex와 Claude Code에 적용하는 방식
| surface | Codex | Claude Code |
|---|---|---|
| 지속 규칙 | AGENTS.md | CLAUDE.md |
| 재사용 워크플로우 | .agents/skills | .claude/skills |
| 상위 시각 규칙 | DESIGN.md | DESIGN.md |
| 변형 탐색 | 명시적 대안 생성, 별도 작업 단위 | /branch, subagents, 별도 세션 |
| 평가 루프 | task spec + visual checks + skills | critique skill + optional output style + screenshot review |
Codex에서 특히 잘 듣는 방식
- 작업 명세를
목표 / 제약 / 검증 / 금지선구조로 준다 AGENTS.md에 디자인 금지선을 올려 persistent contract로 만든다- screenshot과 visual reference를 함께 주고, visual check를 검증 항목으로 넣는다
- design-review skill을 따로 만들어 반복 루프를 고정한다
Claude Code에서 특히 잘 듣는 방식
CLAUDE.md에 design review sequence를 짧게 고정한다.claude/skills에design-critique,design-polish,ui-regression-check같은 스킬을 둔다- 필요하면 custom output style로 “더 엄격한 디자인 리뷰어” 성격을 main loop에 부여한다
/branch로 2~3개의 레이아웃 대안을 만든 뒤, 가장 좋은 방향만 이어간다
Claude Code의 output style을 디자인 리뷰에 쓰는 방법
Claude Code의 output style은 시스템 프롬프트를 직접 바꾸는 계층이라, 기본 coding loop보다 더 엄격한 디자인 품질 검토를 걸고 싶을 때 유용합니다.
---
name: Design Critic
description: UI 구현 후 시각 품질과 시스템 일관성을 먼저 점검
keep-coding-instructions: true
---
Always review generated UI against DESIGN.md before finalizing.
Favor restrained hierarchy over decorative gradients.
Flag overuse of rounded corners, shadow stacks, and duplicate CTA emphasis.
When reviewing, prefer targeted patches over full rewrites.이건 primary control surface가 아니라 보조 bias layer로 보는 편이 맞습니다.
핵심은 여전히 DESIGN.md + component constraints + screenshot review입니다.
고품질 디자인을 뽑는 기본 루프
추천 운영 순서
- 먼저
DESIGN.md와 구현 가드레일을 고정한다. - 첫 생성은 넓게 하되, 두 번째부터는 patch 범위를 좁힌다.
- 매 반복마다 screenshot 기준으로 리뷰한다.
- “전체 다시”보다 “이 3가지 mismatch만 수정”을 선호한다.
첫 시도에서 완벽한 디자인을 얻으려 하기보다, 짧은 생성-평가-수정 루프를 팀의 기본 워크플로우로 만드는 것이 더 중요합니다.
흔한 안티패턴
| 안티패턴 | 왜 품질이 떨어지나 | 교정 방식 |
|---|---|---|
| "Vercel처럼 만들어줘" 한 줄 지시 | 브랜드 언어를 외부 레퍼런스에 위탁 | 추출한 규칙을 내 DESIGN.md로 환원 |
| 프롬프트만 계속 길게 쓰기 | 지속 규칙이 세션 밖에 남지 않음 | AGENTS.md/CLAUDE.md/skills로 승격 |
| 첫 생성물을 바로 확정 | 평균적 산출이 그대로 제품화됨 | screenshot critique 필수화 |
| 디자인 리뷰 없이 코드 리뷰만 수행 | 타입은 맞지만 화면은 평범해짐 | rubric과 visual checks 추가 |
리뷰 체크리스트
- 이 화면이 generic SaaS UI가 아니라 우리 제품답게 보이는가?
DESIGN.md의 do/don't가 실제 구현에 반영됐는가?- primary CTA, radius, shadow, spacing이 한 vocabulary로 정리되는가?
- 임의 색상/간격/장식 값이 시스템 바깥에서 새고 있지 않은가?
- 다음 반복에서 전체 리라이트가 아니라 targeted patch가 가능한가?
관련 장 연결
- 상위 시각 문서 자체는 DESIGN.md 인터페이스에서 다룹니다.
- 지속 규칙 주입은 컨텍스트 주입에서 이어집니다.
- 실제 도입 단계는 실행 플레이북과 함께 보면 좋습니다.