긴 대화 AI 코딩 드리프트, driftguard-mcp로 잡기

제목: 긴 대화에서 AI 코딩이 ‘조용히’ 망가질 때, driftguard-mcp로 드리프트를 잡는 법
긴 세션으로 Claude Code나 Gemini CLI, Codex를 돌리다 보면 어느 순간 답이 이상해질 때가 있어요.
에러도 없고 경고도 없는데 답변이 짧아지고, 예전 패턴을 재활용하고, 처음 요구사항을 놓치는 그 느낌요.
1) “오프데이”가 아니라 ‘측정된 현상’ — Long context의 함정
요약: 128K+ 토큰을 지원해도, 성능은 훨씬 일찍 무너지기 시작한다는 게 핵심이에요.
이게 체감이 아니라 벤치마크/현업 데이터로 확인된 문제라 더 중요합니다.
ICML 2025의 NoLiMa 벤치마크는 128K+ 토큰을 지원한다고 말하는 12개 모델을 테스트했는데, 32K 토큰 지점에서 10개 모델이 short-context 성능의 50% 아래로 급락했어요.
코딩 쪽에서도 Sourcegraph 엔지니어들이 Claude Code 품질이 147K~152K 토큰에서 떨어진다고 문서화했죠(명시 스펙 200K보다 훨씬 전).
실무자들 중엔 전체 용량의 20~40%만 써도 드리프트가 시작된다고 보는 경우도 있어요. 즉 “한도까지 안전”이 아니라 “중간부터 서서히 붕괴”가 일반적이라는 뜻입니다.

2) driftguard-mcp가 하는 일: 세션 도중 ‘드리프트’ 실시간 점검
요약: driftguard-mcp는 긴 세션에서 모델이 망가지는 신호를 ‘점수화’하고, 지금 끊을지/이어갈지 추천해줘요.
특히 “느낌상 이상한데?”를 수치와 근거로 바꿔준다는 게 실전 가치입니다.
이 도구는 MCP 툴 3개를 제공하고, 코딩 세션 중간에 바로 호출할 수 있어요.
대표적으로 get_drift()는 6가지 요인으로 현재 세션 상태를 점검하고 “지금 새로 시작하라” 같은 Plain-English 권고를 먼저 보여줍니다. 예시처럼 Context depth, Repetition, Length collapse 같은 지표가 막대 형태로 뜨고, 총점으로 위험도를 이해할 수 있어요.
그리고 목표를 넣어 **현재 대화가 목표에서 얼마나 멀어졌는지(Goal distance)**도 같이 보게 할 수 있습니다. 예: get_drift({ goal: "implement rate limiting on the login endpoint" })
3) 핵심 기능 3종: get_drift() / get_handoff() / get_trend()
요약: 이 도구는 “진단 → 안전한 종료(인수인계) → 추세 확인” 흐름이 깔끔해요.
긴 작업일수록 “언제 끊고 어떻게 이어갈지”가 생산성을 좌우하니까요.
get_drift()
왜 유용하냐면, 세션이 망가지는 순간은 보통 조용히 오기 때문이에요. 답이 짧아지고 반복되면 이미 늦었는데, 이걸 조기에 감지해 “리셋 타이밍”을 잡아줍니다. 특히Claude Code/Gemini CLI처럼 CLI 기반으로 길게 돌릴 때 체감이 커요.get_handoff()
이건 실제로 게임 체인저예요. AI가 프로젝트 루트에handoff.md를 작성해서 **지금까지 한 일, 현재 상태, 수정한 파일, 열린 질문(미해결 이슈)**을 정리해줍니다. 세션을 새로 파도 컨텍스트 손실을 최소화하려는 설계죠.get_trend()
한 번의 진단보다, “계속 나빠지는 중인지”가 훨씬 중요할 때가 많아요.get_trend()는 점수 히스토리와 스파크라인(sparkline), 최고/평균, 궤적을 보여줘서 드리프트가 누적되는 패턴을 확인하게 해줍니다. 예를 들어 PR 하나 끝낼 때마다 드리프트가 치솟는다면 작업 단위를 재설계해야 하거든요.

4) 점수는 어떻게 계산될까: 6가지 요인과 가중치
요약: driftguard-mcp 점수는 “그럴듯한 체감”이 아니라 토큰/반복/길이 붕괴 등을 조합한 가중 합산이에요.
어떤 지표를 신뢰할지 판단하려면, 무엇을 측정하는지 아는 게 중요하죠.
가중치는 다음처럼 구성돼요.
- Context saturation 37%: 실제 API 토큰 카운트 기반으로 컨텍스트 포화를 봅니다. “한도에 가까운가”를 가장 강하게 반영해요.
- Repetition 37%: 3-gram 슬라이딩 윈도우로 반복을 측정해 패턴 재활용을 잡습니다. 길게 갈수록 같은 말만 돌려 말하는 현상을 수치화해요.
- Response length collapse 15%: 답변 길이가 무너지는 현상을 감지합니다. 코드/설계 설명이 갑자기 짧아지면 보통 품질도 같이 흔들려요.
- Goal distance 8%: TF‑IDF 코사인 유사도로 목표와의 거리(이탈)를 봅니다. 즉 “일은 하는데 딴소리”를 잡는 장치예요.
- Uncertainty signals 2% / Confidence drift 1%: 확신 없는 신호나 자신감의 흔들림까지 보조 지표로 반영합니다.
또 하나 중요한 점은 세션 JSONL을 디스크에서 직접 읽고, API 키/프록시/텔레메트리가 없다는 거예요. Claude와 Gemini는 실 토큰 카운트, Codex는 추정치 기반이라고 명시돼 있습니다. 도입 장벽이 낮고 보안 부담도 줄어드는 설계죠.
5) 설치와 실제 사용 시나리오: “끊는 기준”을 운영 룰로 만들기
요약: 설치는 npm으로 끝나고, 한 번 설정하면 여러 도구에 자동 연결돼요.
진짜 가치가 나는 지점은 “개인 감”이 아니라 팀의 작업 루틴/운영 규칙으로 바꿀 때입니다.
설치는 아래처럼 간단합니다.
npm install -g driftguard-mcpdriftguard-mcp setup
setup 한 번으로 Claude Code, Gemini CLI, Codex CLI, Cursor까지 자동 구성되고, CLI만 재시작하면 툴이 활성화됩니다.
실전에서는 예를 들어 “로그인 엔드포인트에 rate limiting 추가” 같은 작업을 할 때, 구현 중간에 get_drift({ goal: ... })로 체크해요. 점수가 높고 반복/길이 붕괴가 보이면 그 자리에서 get_handoff()로 정리 문서 만들고 세션을 새로 파는 거죠. 이렇게 하면 문제를 억지로 끌고 가다 더 크게 망치는 시간을 줄일 수 있어요.
마무리: 긴 컨텍스트는 만능이 아니라, 관리 대상이에요
AI 코딩에서 “대화가 길어질수록 똑똑해진다”는 기대는 종종 깨집니다. 오히려 조용히 성능이 떨어지는 드리프트를 언제 감지하고 끊을지가 생산성을 좌우해요.
오늘부터는 감으로 버티지 말고, get_drift()로 상태를 확인해보고 위험 신호가 보이면 get_handoff()로 깔끔하게 넘겨서 새 세션으로 이어가는 루틴을 한 번 만들어보세요. (npm/GitHub 링크도 공식으로 열려 있으니 팀 단위로 적용해보기 좋습니다.)






