Kanji
・클라우드 엔지니어 / 프리랜서 ・1993년생 ・에히메현 출신 / 도쿄도 시부야구 거주 ・AWS 경력 5년 프로필 상세
목차
일상적인 소프트웨어 개발 업무에서 저는 여러 AI 코딩 에이전트(Google Antigravity, Anthropic Claude Code, Kiro, OpenAI Codex)를 동시에 조합해 사용하고 있습니다. 그런데 이 과정에서 제가 가장 깊이 고민하고 수많은 재작업과 아찔한 사고를 겪었던 지점은 바로 「에이전트 규칙 정의(프롬프트·지시서)의 붕괴와 도구 간 괴리」 였습니다.
처음에는 코딩 컨벤션과 금지 사항을 꼼꼼하게 정리한 문서를 만들어 AGENTS.md 나 CLAUDE.md 에 그대로 붙여넣기만 하면 어느 도구에서든 똑똑하게 동작할 줄 알았습니다. 하지만 여러 프로젝트를 동시에 운영하고 저장소 규모가 커지면서 현장에서는 다음과 같은 뼈아픈 문제들이 연달아 터졌습니다.
AGENTS.md
CLAUDE.md
git push origin main
이 글에서는 이러한 현장의 시행착오 끝에 정립한 「4대 AI 에이전트(Antigravity / Kiro / Claude Code / Codex) 규칙 아키텍처 완전 설계론」 을 공유합니다.
모든 도구에서 통용되는 공통 오픈 표준(Universal Foundation) 과 각 도구의 고유 강점을 끌어내는 특화 확장(Specialized Superpowers) 의 경계를 명확히 가르고, 실무에서 무너지지 않는 하이브리드 연합형 규칙 아키텍처(Federated Rules Architecture) 설계도를 공개합니다.
실무에서 AI 에이전트를 매일 깊숙이 활용하는 엔지니어라면 거의 예외 없이 밟게 되는 3가지 함정이 있습니다.
“테스트 코드는 반드시 작성할 것”, “커밋 메시지 규칙”, “특정 라이브러리의 구버전 사용 금지”, “클라우드 IAM 최소 권한 원칙…” 등 프로젝트의 모든 규칙을 단일 루트 AGENTS.md 파일에 전부 밀어 넣는 패턴입니다.
에이전트는 매 턴 도구를 호출할 때마다 이 문서 전체를 프롬프트 창에 주입합니다. 규칙이 1,000줄(수천~1만 토큰 이상)에 달하면 매 실행마다 막대한 토큰 비용이 새어 나갈 뿐만 아니라, LLM의 어텐션 메커니즘이 포화 상태에 빠져 정작 가장 중요한 지시를 놓칠 확률이 기하급수적으로 치솟습니다 .
“Claude Code에는 CLAUDE.md 가 필요하고 다른 도구에는 AGENTS.md 가 필요하니까”라며 두 파일에 똑같은 내용을 복사해 관리하는 패턴입니다. 기능이 추가되거나 아키텍처 규칙이 바뀔 때 한쪽 파일만 업데이트하고 다른 쪽을 잊어버리면, 에이전트 A는 최신 규칙으로 코드를 짜고 에이전트 B는 옛날 규칙으로 기존 코드를 덮어쓰며 망가뜨리는 지옥이 시작됩니다.
“main 브랜치 직접 push 금지”, “시크릿 키 커밋 금지” 같은 절대적인 보안·안전 통제를 Markdown의 정중한 자연어 문장만으로 강제하려는 패턴입니다. LLM은 확률적 모델이기 때문에 아무리 강한 어조로 적어도 복잡한 다단계 추론 중이나 컨텍스트 압박 상황에서는 프롬프트 지시를 우회할 수 있습니다. 절대 어겨서는 안 되는 규칙은 문장으로 부탁하는 것이 아니라, 훅(Hook)이나 권한 정책·샌드박스로 물리적으로 차단하는 것이 철칙입니다.
현재 주류인 4대 코딩 에이전트가 규칙을 로드하고 처리하는 메커니즘을 최신 사양 기준으로 정리했습니다.
~/.gemini/config/rules/*.md
<repo>/AGENTS.md
~/.kiro/steering/*.md
.kiro/steering/*.md
~/.claude/rules/*.md
~/.codex/AGENTS.md
AGENTS.override.md
config.toml
glob
model_decision
manual
#[[file:...]]
@path/to/file
settings.json
어떤 에이전트를 쓰더라도 절대 흔들리지 않는 3가지 아키텍처 대원칙이 있습니다.
리눅스의 /etc/ → ~/.config/ → ./ 구조와 마찬가지로, 에이전트 규칙도 아래 3계층으로 나누고 「로컬(하위) 설정이 항상 글로벌(상위) 설정을 오버라이드한다」 는 원칙을 철저히 적용합니다.
/etc/
~/.config/
./
~/.gemini/config/rules/
~/.claude/rules/
./AGENTS.md
./src/api/AGENTS.md
상시 로드되는 루트 AGENTS.md 의 분량은 150~200줄 이내 로 엄격히 제한합니다. 모든 문장에 대해 다음 리트머스 테스트(Litmus Test)를 적용해 보십시오. > 「이 줄을 지웠을 때, 에이전트가 치명적이거나 되돌릴 수 없는 실수를 저지르는가?」
린터(Linter), 포매터(Formatter), 타입 체커가 자동으로 잡아낼 수 있는 코드 스타일 규칙이나 프레임워크의 흔한 기본 사용법은 과감히 삭제합니다. 에이전트가 코드만 보고 추론할 수 없는 ’프로젝트 고유의 예외 사항’과 ’정확한 빌드·검증 명령어’만 남깁니다.
규칙 파일 안에 장황한 배포 매뉴얼이나 다단계 마이그레이션 절차를 적어 넣어서는 안 됩니다. - Rule ( AGENTS.md ) : 항상 지켜야 할 불변의 판단 기준, 경계선, 금지 사항만 정의합니다. - Skill ( SKILL.md ) / Runbook : 구체적인 작업 절차, 스크립트, 트러블슈팅 명령어는 별도 스킬로 분리해 필요한 순간에만 온디맨드로 로드하게 만듭니다.
SKILL.md
3계층 캐스케이드 원칙을 이해하더라도, 실무 엔지니어가 그다음으로 가장 많이 막히는 지점은 「구체적으로 어떤 규칙을 글로벌에 두고, 어떤 규칙을 저장소 안에 두어야 하는가」 라는 스코핑(Scoping) 경계 설계입니다.
저 역시 초창기에는 “매번 적기 번거로우니까”라는 이유로 특정 프로젝트 설정을 글로벌 영역에 적어두었다가 다른 고객사 저장소에서 엉뚱한 프로필로 명령이 실행될 뻔한 아찔한 경험을 했고, 반대로 개인 Mac의 로컬 경로를 저장소에 커밋해 팀원의 환경을 깨뜨린 적도 여러 번 있었습니다.
현재 제가 모든 실무 워크플로우에서 엄격하게 적용하고 있는 ’글로벌’과 ’워크스페이스’의 책임 경계 매트릭스는 다음과 같습니다.
~/.gemini/...
./.agents/...
です/ます
features/
components/
/tmp
npm run build
pytest
npm run dev
tsc --noEmit
ruff check
SPONSORED
feat:
fix:
git worktree
develop
main
이 경계선이 흐려지면 에이전트는 순식간에 개발 현장에 미묘한 버그와 운영 사고를 일으킵니다.
“매번 설정하기 귀찮으니까”라며 글로벌 규칙( ~/.gemini/config/rules/ 나 ~/.claude/rules/ )에 AWS_PROFILE=company-prod 나 특정 로컬 절대 경로( /Users/user01/workspace/client-a/... )를 박아 넣는 경우입니다. 나중에 개인 토이 프로젝트나 고객사 B의 저장소를 열었을 때, 에이전트가 무의식적으로 고객사 A의 프로필이나 인증 정보를 사용해 명령을 실행하려 들면서 권한 오류로 작업이 멈추거나, 최악의 경우 타사 인프라에 잘못 배포하는 대형 사고 로 이어집니다.
AWS_PROFILE=company-prod
/Users/user01/workspace/client-a/...
저장소의 AGENTS.md 에 본인 Mac 고유의 절대 경로( file:///Users/kanji/... ), 개인 SSH 별칭, 로컬 전용 환경 설정을 적어 그대로 Git에 커밋해 버리는 경우입니다. CI/CD 파이프라인(GitHub Actions)이나 Linux 컨테이너, 혹은 Windows PC를 쓰는 팀원이 git pull 을 받는 순간 존재하지 않는 경로 때문에 자동화 빌드가 즉시 깨지고, Git 히스토리에는 개인 머신의 내부 디렉터리 구조가 영구히 박제 되는 참사가 벌어집니다.
file:///Users/kanji/...
git pull
“언젠가 모든 프로젝트에 도움이 되겠지”라는 생각으로 Next.js, Python, Terraform, Docker, Go, Rust, Tailwind의 베스트 프랙티스를 전부 글로벌 규칙에 우겨 넣는 경우입니다. 에이전트는 단 한 줄짜리 셸 스크립트를 작성하는 가벼운 세션에서도 시작하자마자 10,000 토큰이 넘는 무관한 글로벌 규칙을 머릿속에 강제로 떠안게 됩니다. 그 결과 정작 사용자의 현재 지시를 해석할 컨텍스트 공간이 압박받고 어텐션이 분산되어 할루시네이션과 지시 불이행이 급증 합니다.
규칙을 어디에 둘지 헷갈릴 때는 다음 두 가지 질문을 스스로에게 던져 보십시오.
“여러 프로젝트에서 공통으로 쓰고 싶지만 Terraform을 만질 때 외에는 로드하고 싶지 않은 규칙”(예: 인프라 명명 규칙이나 Dockerfile 작성법)은 Antigravity의 trigger: glob: "**/*.tf" 나 Kiro의 조건부 Steering을 활용합니다. 파일 자체는 글로벌 영역에 두되, 매칭되는 파일이 실제로 열렸을 때만 컨텍스트에 지연 주입하는 설계 가 가장 세련된 Gen 3 운용법입니다.
trigger: glob: "**/*.tf"
보편적인 기반을 다졌다면, 이제 각 도구의 고유 기능을 적재적소에 결합해 레버리지를 극대화할 차례입니다.
Antigravity의 가장 강력한 무기는 ~/.gemini/config/rules/*.md 에서 지원하는 세밀한 YAML Frontmatter 조건 지정 입니다.
--- trigger: glob globs: "**/*.tf, **/*.tfvars, infra/**/*.yaml" description: Terraform naming conventions and provider requirements --- ## 인프라 명명 규칙 - 리소스 이름에는 반드시 환경 프리픽스(prd, stg, dev)를 포함해야 합니다.
description
Kiro는 Steering 문서 안에 실제 소스 코드 파일을 동적으로 임베딩하는 라이브 참조 문법을 지원합니다.
## API 에러 핸들링 규약 모든 에러 응답 페이로드는 아래 중앙 스키마 정의를 엄격히 준수해야 합니다: #[[file:src/types/api_errors.ts]]
문서 안에 코드 조각을 복사해 붙여넣을 필요가 없으며, 실제 타입 정의 코드가 수정되면 에이전트의 Steering 컨텍스트도 자동으로 최신 상태를 유지합니다. 또한 /context show 명령어로 현재 세션에 어떤 규칙이 주입되어 있는지 실시간으로 확인하고 디버깅할 수 있습니다.
/context show
Claude Code는 저장소 루트에 CLAUDE.md 가 존재하면 AGENTS.md 보다 우선해서 읽어들입니다. 이때 많은 macOS / Linux 엔지니어가 「 CLAUDE.md -> AGENTS.md 심볼릭 링크만 걸어두면 끝」 이라는 로컬 편법에 손을 대곤 하지만, 팀 개발이나 Windows 환경이 섞인 실무 현장에서는 치명적인 무음(Silent) 장애 를 일으킵니다.
CLAUDE.md -> AGENTS.md
Windows(Git for Windows)는 기본 설정에서 심볼릭 링크가 비활성화( core.symlinks = false )되어 있습니다. Windows 개발자가 심볼릭 링크가 포함된 저장소를 git clone 하면, CLAUDE.md 는 실제 링크가 아니라 단순히 "AGENTS.md" 라는 문자열 9바이트만 적힌 평문 텍스트 파일 로 생성됩니다. 그 결과 Claude Code는 아무런 경고도 띄우지 않은 채 이 9바이트짜리 껍데기를 전체 지시서로 읽어 들이며, 모든 안전 규칙과 아키텍처 가이드라인이 소리 소문 없이 통째로 증발한 상태로 동작 하는 최악의 사태에 빠집니다.
core.symlinks = false
git clone
"AGENTS.md"
정석: 네이티브 @AGENTS.md 인클루드 문법 활용 (권장) CLAUDE.md 를 일반 텍스트 파일로 생성하고 첫 줄에 @AGENTS.md 임포트 지시자를 작성합니다.
@AGENTS.md
@AGENTS.md ## Claude Code 전용 지시사항 - (Claude Code에서만 추가로 적용할 동작이나 서브에이전트 역할이 있다면 이곳에만 작성)
순수 텍스트 파일이므로 Windows, macOS, Linux, 컨테이너 CI 러너 어디서든 100% 결정론적으로 전개되며, Claude 전용 추가 지시도 깔끔하게 분리할 수 있습니다.
대안: 애초에 CLAUDE.md 를 두지 않기 (제로 설정 폴백 위임) Claude Code는 저장소에 CLAUDE.md 가 아예 없으면 자동으로 AGENTS.md 를 찾아 폴백(Fallback) 로드하는 공식 사양 을 갖추고 있습니다. Claude 전용 프롬프트가 필요 없는 프로젝트라면 AGENTS.md 단 한 장만 유지하는 것이 가장 깔끔한 무보수 패턴입니다.
나아가 절대 깨져서는 안 되는 보안 경계는 프롬프트 문장으로 애원하지 않고 .claude/settings.json 의 결정론적 PreToolUse 훅으로 기계적으로 차단합니다.
.claude/settings.json
PreToolUse
{ "hooks": { "PreToolUse": [ { "matcher": ".*", "hooks": [ { "type": "command", "command": "python3 scripts/secret_guard.py" } ] } ] } }
실전 주의사항 1: 훅이 스스로를 가두는 ’셀프 락아웃(Self-Lockout) 함정’을 피하라 PreToolUse 훅에서 시크릿(OpenAI/Anthropic API 키 등)을 검사할 때 단어 경계 없는 단순 정규표현식(예: sk-[A-Za-z0-9_-]+ )을 쓰면, 일반 Markdown 본문 속 risk-assessment-workflow... 같은 케밥 케이스 문자열까지 오탐지해 종료 코드 2를 반환합니다. 이 순간 Claude Code는 파일 읽기와 편집을 포함한 이후의 모든 도구 실행을 차단 하여 에이전트가 문제를 고치지도 못한 채 영구 락에 걸리는 사고가 발생합니다. 반드시 엄격한 단어 경계( \b )를 지정하고, 로컬 개발용 .env 나 테스트용 더미 파일은 안전하게 예외 처리하는 페일 오픈(Fail-Open) 설계를 적용하십시오.
sk-[A-Za-z0-9_-]+
risk-assessment-workflow...
\b
.env
실전 주의사항 2: 기존 규칙 덮어쓰기 사고를 막는 인스톨러 설계 ( install.py ) 새 프로젝트나 팀원의 저장소에 표준 규칙 팩을 배포할 때 수동 cp 명령어를 쓰면 기존에 공들여 작성한 AGENTS.md 나 CLAUDE.md 를 경고 없이 덮어쓰는 사고가 자주 일어납니다. 기존 파일을 자동으로 .bak 으로 백업하고 병합을 안내하는 설치 스크립트( install.py )를 마련해 두는 것이 팀 도입의 베스트 프랙티스입니다.
install.py
cp
.bak
대규모 모노레포에서 상위 디렉터리의 방대한 규약을 특정 서브 패키지나 격리 영역에서 완전히 끊어내고 싶을 때 Codex의 AGENTS.override.md 가 큰 위력을 발휘합니다. 이 파일을 배치한 디렉터리 하위에서는 상위 AGENTS.md 탐색이 즉시 중단되어, 군더더기 없는 깨끗한 컨텍스트로 작업을 수행할 수 있습니다.
또한 Codex의 기본 문서 읽기 상한이 32 KiB 라는 점도 반드시 기억해야 합니다. 거대한 규칙 파일을 두면 파일 끝부분이 아무 경고 없이 잘려 나가므로, config.toml 의 project_doc_max_bytes 를 조정하거나 규칙 자체를 슬림하게 유지해야 합니다.
project_doc_max_bytes
4가지 에이전트 모두가 하나의 저장소에서 충돌 없이 조화롭게 동작하도록 제가 실무에서 사용하는 표준 디렉터리 구조입니다.
my-project/ ├── AGENTS.md # [SSOT] 전 에이전트 공통 핵심 규칙 (200줄 미만) ├── CLAUDE.md # Claude 전용 (@AGENTS.md 인클루드로 Windows 호환 100% 보장) ├── .kiro/ │ └── steering/ # Kiro 전용 파일 매칭 조건부 규칙 & #[[file:...]] ├── .gemini/ (또는 global) │ └── rules/ # Antigravity 전용 glob / model_decision 조건부 규칙 ├── .codex/ │ └── config.toml # Codex 바이트 상한 및 샌드박스 정책 정의 └── .agents/ └── hooks.json # 사고를 물리적으로 차단하는 PreToolUse / PostToolUse 가드레일
docs/
AI 코딩 에이전트의 규칙 관리는 이제 프롬프트 입력창에 주의사항 몇 줄을 덧붙이던 수준을 완전히 넘어섰습니다.
이 다섯 가지 기둥만 단단히 세워 두어도 에이전트의 어이없는 재작업과 지시 무시가 극적으로 줄어들며, 여러 에이전트를 매끄럽게 오케스트레이션하는 예측 가능하고 빠른 자율 개발 환경을 구축할 수 있습니다. 오늘 바로 여러분의 저장소에 있는 규칙 파일부터 점검해 보시기 바랍니다.
AI 에이전트 장기 기억을 바이너리 벡터 DB에서 Markdown SSOT 및 하이브리드 GraphRAG로 전환한 Gen 3 아키텍처 완전 해설. 규칙 영문화를 통한 토큰 절반 절 ... [더 보기]
2026년 11월 프론티어 AI 모델 벤치마크 순위 및 API 요금 비교: Claude Opus 5.5(SWE-bench 86.8%), Gemini 4 Carbon/Argon($2 ... [더 보기]
Google Antigravity와 같은 AI 어시스턴트를 사용자 정의하면 규칙과 기술을 관리하기에는 너무 많아질 수 있습니다. 이 문서에서는 AI 상담원이 자체 구성을 검토하고 ... [더 보기]
실전 같은 AI 음성 모의 통화와 5축 정밀 피드백. 16강 인터랙티브 강의와 스튜디오급 AI 프로필 생성 지원.
영수증 촬영 즉시 Gemini AI가 품목과 금액을 자동 인식. 모임 및 여행 경비를 손쉽게 더치페이하고 정산합니다.
점술사, 집사, 바텐더 AI 캐릭터가 직접 게임을 진행하고 대화 주제를 던져 모임을 흥미진진하게 만듭니다.
Antigravity, Kiro, Claude Code, Codex를 지원하는 범用 AGENTS.md, hooks.json, Git 가드 스크립트 및 검증 도구 일체를 다운로드하여 즉시 실무에 적용하세요.