LLM 코드 품질을 끌어올리는 Fabien Sanglard의 agent.md
My agent.md to improve LLM-assisted code quality
TL;DR Highlight
반복하던 코드 리뷰 지적을 agent.md에 넣어 LLM 코드 품질을 높였다
Who Should Read
AI 코딩 에이전트가 짠 스파게티 코드를 세션마다 같은 지적으로 고치고 있는 개발자
Core Mechanics
- 반복 지적은 agent.md로 옮겼다
- 세션이 시작되면 하네스(코딩 도구)가 agent.md를 읽어 프롬프트에 넣는다.
- 같은 지적을 또 하게 될 때마다 규칙을 한 줄씩 추가했다.
- 프로젝트 루트에 두면 되고, gemini.md나 claude.md는 심볼릭 링크로 연결할 수 있다.
- 코드 스타일 규칙을 구체적으로 적었다
- 매직 넘버는 상수나 enum으로 빼고, 들여쓰기는 early return과 continue로 줄이라고 적었다.
- 함수 이름은 30자 미만, boolean 파라미터 대신 enum, if는 한 줄이어도 {}를 쓰게 했다.
- 기능과 무관한 코드는 건드리지 말고 바뀐 줄을 최소화하라는 규칙도 넣었다.
- 구조와 소통 규칙도 넣었다
- 멤버는 기본 private, 접근자를 바꾸기 전에는 사용자 승인을 받게 했다.
- 레이어는 바로 아래 이웃만 호출하고, 컨트롤러가 DB나 하드웨어 드라이버를 직접 부르지 못하게 했다.
- 칭찬은 빼고 최소한의 단어로 냉정하게 답하라고 했다.
- 버그 수정은 테스트부터 시키게 했다
- 테스트를 먼저 쓰고 실패를 확인한 뒤 수정하고, 통과를 확인하게 했다.
- 저자는 이 방식으로 생성 코드가 상당히 좋아졌다고 썼다.
- 그래도 코드를 읽지 않아도 되는 마법은 아니고, LLM은 계속 환각을 낸다고 했다.
Community Reactions
- 린터로 강제하자는 의견
- {} 강제나 함수 이름 길이는 린터로 걸면 직접 코딩하는 사람도 같은 피드백을 받는다는 의견이 있었다.
- 'what은 코드 자체'라서 블록마다 설명 주석을 달게 하면 노이즈가 늘어난다는 지적도 있었다.
- 규칙 상당수가 불필요하다는 경험
- Claude를 1년 가까이 써도 Arrow Anti-Pattern 코드를 본 적이 없다는 경험이 있었다.
- 8~9개 규칙은 기본 CS라 시킬 필요가 없고, '숨 쉬게 하라' 같은 모호한 지시는 효과가 약하다는 의견도 있었다.
- 규칙 적용 시 특정 문자열을 출력하게 해 효과를 측정해 보라는 제안도 있었다.
- 컨텍스트 부담과 구조 분리
- AGENTS.md가 비대할수록 컨텍스트 소모가 커지고, 에이전트가 먼저 적용할 규칙을 고르게 했더니 일관성이 100%였다는 경험이 있었다.
- 코딩 규칙은 CODING_STANDARDS.md로 빼고 스킬이 필요할 때만 찾게 한다는 경험도 있었다.
- /tdd를 항상 쓰는데 가끔 어색한 테스트가 나와도 결함이 훨씬 줄었다는 경험이 있었다.
- 금지형보다 긍정형 문장이 낫다는 의견
- 'X 하지 마'는 모델에게 X를 먼저 심는 셈이라, 'Y를 하라, 이유는 이렇다'로 쓰는 편이 낫다는 의견이 있었다.
- 함수 이름 30자 제한은 이상한 약어를 만들 수 있어 오히려 해롭다는 반론이 있었다.
How to Apply
- 지금 쓰는 지적 3개를 agent.md에 넣기
- 오늘 코드 리뷰에서 에이전트에게 반복한 지적을 3개만 골라 프로젝트 루트의 agent.md에 한 줄씩 적어라.
- 새 세션에서 같은 작업을 시켜 지적이 사라지는지 확인하라.
- 버그 수정에 테스트 선행 규칙 추가하기
- 'Fix 요청이면 실패하는 테스트를 먼저 쓰고, 실패를 확인한 뒤 수정하라'를 agent.md에 넣어라.
- 다음 버그 티켓에 적용해 생성된 diff를 비교하라.
- 기능마다 새 세션을 열고 재로드 명령 쓰기
- 기능 하나가 끝나면 세션을 새로 시작하라.
- 품질이 떨어지면 'Reload agent.md'를 입력하라.
- 린터로 잡을 규칙은 린터로 옮기기
- {} 강제나 이름 길이처럼 기계가 검사할 수 있는 규칙은 린터 설정으로 옮겨라.
- agent.md에는 린터로 못 잡는 설계 규칙만 남겨라.
Try It
# Claude Code나 Cursor 같은 에이전트 IDE의 agent.md(또는 CLAUDE.md)에 붙여넣기. 원문 agent.md의 간이 버전
- 사람이 읽는 글(주석, 커밋 메시지, 답변)은 최소한의 단어로 쓴다. 칭찬과 최상급은 빼고 냉정하게 말한다.
- 매직 넘버와 문자열은 설명적인 상수나 enum으로 뺀다. 한 번 쓰는 자명한 값은 그대로 둔다.
- 들여쓰기를 줄인다. early return과 continue를 쓴다.
- 함수 이름은 30자 미만으로 짧게 쓴다.
- boolean 파라미터 대신 enum을 쓴다.
- if는 한 줄이어도 항상 {}를 쓴다.
- 구현하는 기능과 무관한 코드는 건드리지 않는다. 바뀐 줄을 최소화한다.
- 멤버는 기본 private. 접근 제어자를 넓히기 전에 승인을 요청한다.
- 버그 수정 요청이면 수정 전에 테스트를 먼저 쓰고, 실패를 확인한 뒤 수정하고, 통과를 확인한다.
# 이어서 해 볼 것: 에이전트에게 "이 규칙을 적용할 때마다 [RULE:규칙이름]을 출력해"라고 시켜 어떤 규칙이 실제로 지켜지는지 세어 보세요.Terminology
관련 논문
AI는 도구다, 잘 쓰려면 기술이 필요하다
Hickey의 'AI는 도구가 아니다'에 맞서, LLM도 쓰는 사람의 기술이 결과를 가른다고 반박
딥리서치 에이전트의 Reflective Prompt Optimization: 토픽 분리·멀티 시드로 본 진짜 성능 향상과 프롬프트 과적합
GEPA로 프롬프트를 최적화했더니 held-out 인용 보상 0.702→0.781
GPT-6와 Intelligent UI: 채팅 안에서 시각·인터랙티브 응답 만들기
OpenAI가 GPT-6로 채팅 응답에 UI를 넣는다는데 원문이 없어 댓글 반응만 확인된다
Base 모델도 첫 토큰 단서(cue) 하나로 추론한다: 학습 데이터가 만든 연상
응답 첫 두 토큰만 고정했더니 Olmo-3-7B의 MATH-500 정답률이 42%에서 78%로 올랐다
Jev식 Typed Decision Model에서는 정의보다 라벨이 이긴다
옵션 이름을 A, B로 바꿨더니 정확도가 +0.1511 올랐다
프롬프트는 얼마나 필요한가? Few-shot 예시를 블랙박스로 최소화하는 DD-FSM
Delta debugging으로 few-shot 예시를 평균 65.3% 줄여도 출력은 그대로
언어모델은 "불안정한(Insecure)" 보고자다: 결함을 숨기는 LLM 리포트
"Be honest" 한 줄을 붙였더니 GPT-5.5의 부정 결과 공개가 2/200에서 190/200으로 늘었다
Related Resources
- https://fabiensanglard.net/agent.md/index.html
- https://arxiv.org/abs/2307.03172
- https://github.com/gregwebs/skills-sdlc/
- https://github.com/mattpocock/skills/blob/main/skills/engine...
- https://www.minid.net/2026/7/14/how-to-automatise-with-ai
- https://github.com/meerita/monorepo-nextjs-golang-rust-pytho...