AI 코딩 에이전트를 위한 컨텍스트 레이어에 대한 내 생각
My take on a Context layer for your coding agents
핵심 요약
AI 코딩 세션에서 발생하는 결정과 코드의 변화를 체계적으로 기록하고 관리하는 '컨텍스트 레이어' 개념 제안.
- 컨텍스트 레이어 — 코드의 결정 사항과 히스토리를 기록하는 별도의 관리 체계 구축함.
- 클레임 기반 구조 — 불변하는 사실을 기록하고 수정 대신 새로운 클레임을 추가하는 방식 도입함.
- 드리프트 탐지 — 결정되지 않은 코드 변화를 감지하여 에이전트가 규칙을 준수하도록 유도함.
- 쿼리 가능한 그래프 — 브랜치나 상황에 따라 필요한 컨텍스트를 에이전트가 조회할 수 있게 함.
AI 코딩 에이전트를 위한 컨텍스트 레이어
코드베이스는 대부분 드리프트(drift)임. 나머지는 캡처되지 않은 Claude 세션에서 결정된 것들임. 그걸 만든 엔지니어만 뭐가 뭔지 알고, 그 지도는 어디에도 존재하지 않음.
결정 사항, 트레이드오프, 막다른 길, 그리고 Claude가 당신을 위해 내린 결정들이 예고 없이 코드에 스며듦. 세션 외에는 그 무엇도 캡처되지 않음. 코드는 컨텍스트의 최종 결과물이지 컨텍스트 자체가 아님. CLAUDE.md가 조금 도움이 되긴 하지만 정적인 페이지일 뿐임. 실제 추론은 로컬 Claude 폴더에 있는 50개의 JSONL 파일에 담겨 있는데, 아무도 그걸 읽지 않음.
여기 그걸 담아낼 컨텍스트 레이어를 구축하려는 솔직한 시도가 있음.
컴포넌트, 개념, 흐름.
프로젝트의 모든 것은 세 가지 범주에 들어맞음. 컴포넌트는 코드에 고정된 것들임: 서비스, 모듈, 테이블. 개념은 교차적인 아이디어임: 인증 모델, 이벤트 소싱, 다중 턴 컨텍스트. 흐름은 개념 내의 순차적인 프로세스임: 사용자 메시지에서 응답까지, OAuth 핸드오프. 이것들은 MECE하며, 내가 프로젝트를 내부적으로 매핑하는 방식임.
원자는 클레임(claim)임.
세 가지 범주 아래에 있는 모든 것은 클레임임. 한 번 작성되면 불변하는 하나의 원자적 사실. 클레임이 틀리면 수정하지 마셈. 앞을 가리키는 엣지와 함께 새로운 클레임을 작성하셈. 옛날 클레임은 그대로 둠. 역사는 절대 다시 쓰이지 않음. 클레임은 컴포넌트, 개념, 흐름 어디에든 연결될 수 있음. 데이터베이스 테이블 이름을 users에서 accounts로 바꾸셈. 옛날 이름으로 태그된 클레임은 새 이름으로 쿼리해도 여전히 해결됨, 왜냐하면 이름 변경이 새로운 데이터를 생성하기 때문임.
관찰 → 결국 클레임으로
캡처가 그래프에 직접 쓰여서는 안 됨. 모든 알림이 클레임은 아님. 모든 사실은 관찰로 시작하며, 추론 유형(진술된 것을 봄, 코드에서 추론함, 누락된 것에서 추론함)을 가짐. 서로 다른 세션에서의 비슷한 관찰은 함께 클러스터링됨. 일회성인 것들은 나중에 무시됨. 같은 아이디어를 강화하는 여러 세션이 관찰을 클레임으로 승격시켜야 함. 이게 모든 진술이 중요해지는 걸 막는 방법임.
부재를 통한 드리프트 탐지.
어떤 클레임은 그냥 사실인 게 아님. 사실이면서 아무도 결정하지 않은 것들임. 결제 엔드포인트에 재시도 로직이 없음. 왜 폴백이 없지? 아무도 추가하지 않기로 결정한 적이 없음. 드리프트는 그 자체로 하나의 클레임 유형임. 에이전트는 근처에 결정 이벤트가 없는 규칙을 볼 때 이를 플래그함. 이건 코드베이스의 실제 범주임.
그래프 쿼리하기
에이전트는 태그별로 계층적으로 정리된 마크다운 폴더인 스냅샷을 받는데, 다른 폴더처럼 grep할 수 있음. 클레임은 스코프가 지정됨, 왜냐하면 같은 프로젝트라도 다른 컨텍스트에서는 다르게 동작하기 때문임. 메인 브랜치에서 참인 클레임이 기능 브랜치에서는 참이 아닐 수 있음. 흐름이 엔터프라이즈 고객에게는 라이브 상태지만 다른 사람들에게는 스텁(stub)일 수 있음. 쿼리는 컨텍스트(브랜치, 리전, 플래그 상태, 고객 등급 등)를 받아 그 아래에서 유지되는 스냅샷을 반환함. 교차 스코프 쿼리도 작동함: 메인과 이 브랜치의 차이점은? 엔터프라이즈에는 참인데 무료 티어에는 참이 아닌 것은? 시니어 엔지니어들은 이미 이런 정신적 지도를 가지고 있음. 이 레이어는 그걸 쿼리 가능하게 만들어줌.
신뢰도는 감쇠함.
한때 참이었던 클레임이 지금은 아닐 수 있음. 신뢰도는 당신이 설정하는 라벨이 아니라, 얼마나 많은 직접적인 관찰이 클레임을 뒷받침하는지, 어디서 왔는지, 얼마나 최근인지에 대한 함수임. 시스템에 대한 모든 컨텍스트가 이 레이어로 들어온다고 가정하는 건 잘못된 것이므로, 규칙은 90일, 제약 조건은 30일 후에 만료될 수 있음. 새로운 관찰 없이 시간이 지나면 클레임은 재검증을 위해 표면으로 올라옴. 진실은 코드에 있고, 기억이 썩어서는 안 됨. 썩은 클레임은 레이어를 쓸모없게 만들 것임.


