코딩 에이전트가 오래된 파일 읽기(stale file reads)를 수행할 때 이를 감지하는 MCP 서버를 구축했습니다 - 문제점과 배운 점
요약
코딩 에이전트가 파일 변경 사항을 인지하지 못해 발생하는 '오래된 세계 모델 문제(stale world model problem)'를 해결하기 위한 MCP 서버 구축 사례를 소개합니다. 파일의 지문(fingerprint)을 생성하여 디스크와 에이전트의 캐시 간 불일치를 감지하고 재읽기를 유도합니다.
핵심 포인트
- 에이전트가 캐싱된 오래된 파일 정보를 바탕으로 작업하는 문제 분석
- 파일의 mtime과 hash를 이용한 지문 생성 방식의 MCP 서버 구현
- Claude Code, Cursor 등 다양한 MCP 클라이언트와의 호환성 확인
- 긴 세션이나 외부 프로세스에 의한 파일 변경 시 유용함
저는 Antigravity 내부에서 에이전트로 Claude Sonnet 4.6을 실행하던 중, 공유할 가치가 있는 문제에 부딪혔습니다. 이는 일회성 문제가 아니라 일반적인 패턴임이 드러났기 때문입니다.
에이전트가 설정 파일을 읽고 한동안 작업을 수행한 뒤, 자신이 기억하고 있던 값들을 바탕으로 문서를 작성했습니다. 하지만 그 사이에 제가 설정을 변경해 두었습니다. 에이전트는 파일을 다시 읽지 않은 채 작업을 완료하고 성공했다고 보고했지만, 모든 값이 틀렸습니다.
이것은 저만의 설정 문제가 아니라, 에이전트 생태계 전반에 걸쳐 문서화된 실패 사례입니다. Claude Code는 하위 에이전트(subagents)가 오래된 파일 버전(stale file versions)을 읽는 사례(#3032)와, Read/Grep 도구가 오래된 복사본을 제공하는 동안 파일 캐시가 디스크와 일치하지 않는 사례(#51214, 보고자는 오직 대역 외 디스크 확인(out-of-band disk check)만이 이를 감지할 수 있다고 결론지음)를 보고했습니다. Copilot, Codex, Continue 역시 동일한 종류의 문제를 가지고 있습니다. 이제 이것은 "오래된 세계 모델 문제(stale world model problem)"라고 불립니다.
발생 원인: 에이전트가 캐싱한 파일의 뷰(view)가 디스크에 있는 내용과 어긋나게 되고, 에이전트 자신의 읽기 도구들이 때때로 동일한 캐시를 제공하기 때문에, 에이전트가 루프 내부에서 스스로의 괴리를 감지할 수 없게 됩니다.
제가 만든 것: 의존성이 없는(zero-dependency) 작은 MCP 서버입니다. 이 서버는 에이전트가 읽는 모든 파일의 지문(fingerprint)을 생성하며(mtime + hash), 다음 도구 호출 시 에이전트가 마지막으로 확인한 이후 디스크에서 변경된 파일이 무엇인지 보고합니다. 이를 통해 에이전트가 오래된 복사본을 바탕으로 작성하는 대신, 행동하기 전에 파일을 다시 읽도록 합니다. Claude Code, Cursor, Antigravity 등 모든 MCP 클라이언트에서 작동합니다.
가장 유용한 경우: 네 가지 에이전트를 대상으로 테스트해 본 결과, 많은 경우에 이는 중복된 기능이었습니다. 많은 에이전트가 짧은 세션 동안에는 편집 전에 이미 파일을 다시 읽기 때문입니다. 이 도구가 실제로 제 역할을 하는 경우는 변경 사항이 에이전트의 시야 밖(다른 프로세스, 포매터(formatter), 팀원, 병렬 에이전트 등)에서 발생하거나, 우리 대부분이 겪는 긴 세션 동안 컨텍스트가 어긋나는 경우입니다. 코드를 작성하는 것보다 그 경계 지점을 찾는 데 더 많은 시간을 보냈습니다.
리포지토리(Repo)와 데모는 댓글에 있습니다. 만약 공유 리포지토리에서 Claude Code나 Claude-in-Antigravity를 실행하신다면, 실제로 이런 일이 발생하는지, 그리고 어디에서 도움이 되거나 되지 않는지 진심으로 알고 싶습니다.
작성자: /u/Enough-Piano-2362
[link] [comments]
AI 자동 생성 콘텐츠
본 콘텐츠는 r/ClaudeAI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기