context-mode: MCP 도구 출력을 컨텍스트 창 밖에 두어 315KB를 5.4KB로 줄이고 SQLite로 압축 이후에도 세션을 기억

Published · AI Daily — AI-assisted deep research, methodology & disclosure

mksglu/context-mode는 도구 출력으로 컨텍스트 창이 가득 차는 코딩 에이전트를 겨냥한 MCP 서버다. 샌드박스 도구가 원본 데이터를 컨텍스트에 넣지 않으며, README 예시에서는 315KB가 5.4KB(98% 감소)가 된다. 세션 이벤트는 SQLite에 저장되고 대화가 압축된 뒤에는 FTS5와 BM25로 관련 부분만 되찾는다. 17개 클라이언트를 지원하며 MCP 도구 11개를 제공한다. 별은 약 2만 7,000개이고, README 배지는 ELv2이지만 GitHub의 라이선스 감지는 'NOASSERTION'으로 표시한다.

코딩 에이전트에서 가장 간과되는 비용은 컨텍스트 창이다. mksglu/context-mode의 README는 첫머리에서 이를 솔직하게 말한다. MCP 도구를 한 번 호출할 때마다 원본 데이터가 컨텍스트 창에 쏟아진다. Playwright 스냅샷은 56KB, GitHub 이슈 20개는 59KB, 액세스 로그 하나는 45KB다. 30분이 지나면 컨텍스트의 40%가 사라진다. 에이전트가 공간을 비우려고 대화를 압축하면 편집 중이던 파일, 진행 중인 작업, 마지막으로 한 요청을 잊는다. context-mode는 이 문제들을 함께 다루는 MCP 서버다. 2026년 10월 13일 기준 저장소는 별 약 27,340개, 포크 1,948개이고 TypeScript로 작성됐으며 마지막 푸시는 10월 12일이다.

해법은 네 갈래다. 첫째는 컨텍스트 절약이다. 샌드박스 도구가 원본 데이터를 컨텍스트 창 밖에 두며, README 예시에서는 315KB가 5.4KB가 된다. 98% 감소다. 둘째는 세션 연속성이다. 파일 편집, git 작업, 할 일, 오류, 사용자 결정을 모두 SQLite에 기록한다. 대화가 압축될 때 그 데이터를 통째로 되돌리지 않고 이벤트를 FTS5에 색인한 뒤 BM25 검색으로 관련된 것만 가져오므로 모델은 멈춘 곳에서 이어서 일할 수 있다. README는 --continue를 쓰지 않으면 이전 세션 데이터가 즉시 삭제되어 새 세션이 깨끗하게 시작한다고 밝힌다. 셋째는 '코드로 생각하기'다. LLM은 데이터 처리기가 아니라 분석을 프로그래밍하는 쪽이어야 한다. 파일 50개의 함수 수를 세려면 50개를 컨텍스트에 읽지 말고 짧은 스크립트를 짜서 결과만 출력한다. README는 파일 읽기 47번(약 700KB)과 ctx_execute 한 번(3.6KB)을 대비한다. 넷째는 문체를 강제하지 않는 것이다. 원본 데이터를 컨텍스트 밖에 두기만 하고 모델이 최종 답을 어떻게 쓸지는 지시하지 않으며, 지나친 간결성 프롬프트가 코딩·추론 벤치마크를 해칠 수 있다는 Moonshot AI의 kimi-k2.5 이슈를 인용한다.

도구 측면에서는 MCP 도구 11개를 제공한다. 샌드박스 도구 6개(ctx_batch_execute, ctx_execute, ctx_execute_file, ctx_index, ctx_search, ctx_fetch_and_index)와 메타 도구 5개(ctx_stats, ctx_doctor, ctx_upgrade, ctx_purge, ctx_insight)다. Claude Code에서는 플러그인으로 설치되어 PreToolUse, PostToolUse, UserPromptSubmit, PreCompact, SessionStart, Stop 훅을 등록한다. 라우팅은 자동이다. SessionStart 훅이 실행 시점에 라우팅 지침을 주입하며 프로젝트에 파일을 쓰지 않는다. 설치는 /plugin marketplace add mksglu/context-mode와 /plugin install context-mode@context-mode 두 명령 뒤 재시작이면 된다. 먼저 써 보고 싶다면 claude mcp add context-mode -- npx -y context-mode로 MCP만 추가할 수 있지만 훅이 없어 자동 라우팅이 없고, 모델이 이를 우선 쓰리라는 보장은 없다. 슬래시 명령에는 절약량을 보는 ctx-stats, 진단용 ctx-doctor, 로컬 지식 베이스를 다루는 ctx-index와 ctx-search, 색인 내용을 영구 삭제하는 ctx-purge가 있다.

지원 플랫폼이 넓은 점도 특징이다. README는 17개 클라이언트를 지원한다고 하며 설치 복잡도에 따라 묶는다. 훅을 쓸 수 있는 플랫폼은 라우팅이 자동으로 강제되고, 훅이 없는 플랫폼은 라우팅 안내 파일을 한 번 복사해야 한다. Claude Code 외에도 Gemini CLI, VS Code Copilot, JetBrains Copilot, Copilot CLI, OpenCode, KiloCode 등이 문서화되어 있고 대부분 Node.js 22.5 이상 또는 Bun을 요구한다. OpenCode와 KiloCode는 진짜 SessionStart 훅이 없어 프로젝트가 실험적인 시스템 프롬프트 변환 훅으로 대신하고, 없는 UserPromptSubmit 대신 chat.message 훅을 쓴다. 또 ctx_insight는 AI 보조 엔지니어링 팀의 조직 단위 분석을 위한 호스팅 Insight 대시보드를 연다. 로컬 도구와 나란히 놓인 호스팅 서비스의 입구다.

라이선스는 따로 주의가 필요하다. README 배지는 ELv2, 곧 Elastic License 2.0이지만 GitHub의 감지 결과는 NOASSERTION이어서 표준 SPDX 라이선스로 인식되지 않았다. ELv2는 소스 공개형 라이선스로 MIT나 Apache-2.0 같은 오픈소스 라이선스와 달리 소프트웨어를 호스팅 서비스로 제공하는 등의 사용에 제한이 있다. 회사 제품이나 외부 서비스에 쓸 계획이라면 먼저 저장소의 LICENSE 파일을 직접 읽어야 한다.

우리의 판단은 이 프로젝트가 현실적이고 비싼 고통을 짚었고 공학적 논리도 분명하다는 것이다. 원본 데이터를 컨텍스트에 넣지 않고, 세션 이벤트를 검색 가능하게 만들며, 모델이 데이터를 읽는 대신 스크립트를 쓰게 한다. 다만 절제된 태도가 필요하다. 첫째, 98%와 315KB에서 5.4KB는 README의 예시 수치이며 실제 절감은 자신의 도구 출력과 작업 습관에 달려 있으므로 ctx_stats로 자기 작업에서 재 보자. 둘째, 라우팅 강제를 훅에 의존하므로 훅이 없는 플랫폼에서는 효과가 모델의 자율에 좌우된다. 셋째, 세션 데이터가 로컬 SQLite에 저장되므로 민감한 코드나 로그를 다룰 때는 저장 위치, 보존 정책, ctx_purge의 동작을 알아 두어야 한다. 팀에 확산하기 전에 중간 규모의 실제 작업에서 사용 전후의 컨텍스트 소모와 완료 품질을 비교해 보길 권한다.

Sources

FAQ

context-mode는 어떤 문제를 푸는가?

README는 문제를 네 가지로 나눈다. 도구 출력이 원본 데이터를 컨텍스트에 쏟아붓는다(Playwright 스냅샷 한 번이 56KB, GitHub 이슈 20개가 59KB, 액세스 로그 하나가 45KB이고 30분이면 컨텍스트의 40%가 사라진다). 압축 때문에 에이전트가 편집 중인 파일과 작업을 잊는다. 모델이 스크립트를 쓰지 않고 직접 계산한다. 도구가 답변 문체를 지시하지 않아야 한다. 각각에 대한 대책을 제시한다.

압축 이후에도 연속성은 어떻게 유지하나?

파일 편집, git 작업, 할 일, 오류, 사용자 결정을 모두 SQLite에 기록한다. 대화가 압축될 때 그 데이터를 통째로 컨텍스트에 되돌리지 않고, 이벤트를 FTS5에 색인한 뒤 BM25 검색으로 관련 있는 것만 가져온다. README에 따르면 --continue를 쓰지 않으면 이전 세션 데이터는 즉시 삭제된다.

설치와 라이선스에서 주의할 점은?

Claude Code에서는 /plugin marketplace add mksglu/context-mode와 /plugin install context-mode@context-mode로 설치하거나, MCP만 쓰려면 claude mcp add context-mode -- npx -y context-mode를 쓴다. 대부분의 플랫폼에서 Node.js 22.5 이상이 필요하다. README 배지는 ELv2, GitHub 감지 결과는 NOASSERTION이므로 상업적 사용 전에 LICENSE 파일을 읽어야 한다.