Codex가 이제 Claude Code의 메모리를 읽을 수 있습니다
요약
서로 다른 AI 코딩 에이전트 간의 세션 히스토리를 공유할 수 있게 해주는 오픈 소스 도구 'memcp'를 소개합니다. MCP(Model Context Protocol)를 활용하여 Claude Code와 Codex CLI 등 서로 다른 도구의 메모리를 하나의 SQLite 데이터베이스로 통합합니다.
핵심 포인트
- 에이전트 간 세션 로그를 통합하여 컨텍스트 단절 문제 해결
- MCP를 통해 여러 AI 도구가 공유 메모리에 접근 가능
- 로컬 SQLite 기반으로 데이터 보안 및 프라이버시 유지
- 새로운 에이전트 지원을 위한 확장 가능한 파서 구조
문제점: 모든 AI 코딩 에이전트는 제로 상태에서 시작합니다
만약 당신이 하나 이상의 AI 코딩 에이전트를 사용한다면 — 예를 들어 어떤 작업에는 Claude Code를 사용하고 다른 작업에는 Codex CLI를 사용한다면 — 아마 다음과 같은 상황을 겪어보았을 것입니다:
- 한 에이전트와 한 시간 동안 아키텍처 결정을 내린 뒤, 다음 날 다른 에이전트에게 이 모든 것을 다시 설명해야 합니다.
- 특정 버그를 어떤 도구로 수정했는지 진심으로 잊어버립니다.
- 도구를 바꿀 때마다, 정확히 동일한 프로젝트임에도 불구하고 백지 상태에서 대화를 시작해야 합니다.
각 에이전트의 세션 히스토리 (session history)는 각자의 형식으로, 각자의 디렉토리에 존재하며, 다른 모든 도구에는 보이지 않습니다. 에이전트를 전환한다는 것은 서로 다른 메모리의 "섬"으로 이동하는 것을 의미합니다.
저는 이를 해결하는 오픈 소스 도구인 memcp를 만들었습니다. 이 도구는 여러 AI 코딩 에이전트의 세션 로그를 캡처하여 하나의 로컬 SQLite 데이터베이스에 저장하고, 이를 MCP (Model Context Protocol)를 통해 연결된 모든 에이전트에 노출합니다. 따라서 에이전트가 다른 도구의 다른 에이전트가 수행한 작업을 검색하고 정확한 답변을 얻을 수 있습니다.
https://github.com/nnyannya-tech/memcp
작동 방식
에이전트의 세션이 종료됨
│ (자동으로)
▼
...
모든 데이터는 당신의 기기에 머뭅니다 — 클라우드 동기화도, 텔레메트리 (telemetry)도 없습니다. 각 에이전트는 공유 스키마 (session, message, tool call)로 정규화하는 작은 파서 (parser)에 의해 처리되는 고유의 로그 형식을 가집니다:
ParseFn = Callable[[Path], tuple[Session, list[Message], list[ToolCall]]]
새로운 에이전트에 대한 지원을 추가하는 것은 해당 시그니처를 가진 함수 하나를 작성하는 것을 의미합니다. 그것이 확장 포인트 (extension point)의 전부입니다.
memcp는 연결된 모든 에이전트가 호출할 수 있는 네 가지 MCP 도구를 노출합니다:
| 도구 | 설명 |
|---|---|
search_memory(query, limit) | 모든 소스에 걸친 과거 세션 전체에 대한 전문 검색 (Full-text search) |
| ... |
새로운 기능: 에이전트 경계를 넘나드는 메모리
제가 실제로 기대하고 있는 부분은 바로 이 지점입니다. Claude Code와 Codex CLI는 서로 다른 벤더(Vendor)에 의해 구축되었으며, 세션 로그를 완전히 다른 형식으로 저장하고, MCP 서버를 등록하는 메커니즘 또한 완전히 다릅니다. 이들이 하나의 메모리 저장소를 공유하도록 만드는 과정은 Codex CLI의 롤아웃(rollout) 스타일 JSONL 로그를 위한 전용 파서(Parser)를 작성하고, 이를 Claude Code의 로그가 사용하는 것과 동일한 스키마(Schema)로 정규화(Normalizing)하며, memcp setup을 확장하여 단 한 번의 명령으로 두 에이전트의 MCP 등록을 연결하는 작업을 의미했습니다.
실제 결과물은 다음과 같습니다:
── 며칠 전의 Claude Code 세션 ──
사용자: 인증 서비스(auth service)를 위한 JWT 리프레시 토큰 로테이션(refresh token rotation)을 어떻게 구현했나요?
Claude: 토큰 취소(revocation)를 위해 Redis를 사용한 슬라이딩 윈도우(sliding-window) 방식을 사용했습니다.
...
완전히 다른 벤더의 도구가 자신이 수행한 적도 없고, 참여한 적도 없는 세션으로부터 작업 내용을 정확하게 기억해 냅니다. 이것이 실제로 엔드 투 엔드(End-to-end)로 작동하는 것을 보는 것이 이번 프로젝트를 구축하며 가장 만족스러운 부분이었습니다. 에이전트를 전환할 때마다 컨텍스트(Context)를 매번 다시 설명해야 하는 일상적인 번거로움이 사라집니다.
언급할 만한 설정 세부 사항이 하나 있습니다: MCP 서버를 등록하면 search_memory를 *호출(callable)*할 수 있게 되지만, 에이전트는 프로젝트 지침(Instruction)에서 명시적으로 요구할 때만 요청을 받지 않고도 선제적으로 이를 호출합니다. 이 리포지토리의 CLAUDE.md와 AGENTS.md에는 모두 "메모리를 선제적으로 검색하라"는 지침이 포함되어 있으며, 이것이 여기서 별도의 프롬프트 없이도 작동하는 이유입니다. 여러분의 프로젝트에서도 이러한 동작을 원한다면, 해당 프로젝트의 CLAUDE.md(Claude Code용) 또는 AGENTS.md(Codex CLI 및 기타 AGENTS.md를 읽는 도구용)에 동일한 종류의 지침을 추가하세요.
현재 작동하는 것과 아직 작동하지 않는 것
현재 상태에 대해 솔직하게 말씀드리자면 다음과 같습니다:
작동함:
- Claude Code와 Codex CLI 모두에서 세션 로그를 수집 및 파싱(Parsing)하는 기능
- 공유 MCP 도구를 통한 에이전트 간 검색 및 세션 읽기
아직 작동하지 않음:
- 세션 종료 시 자동 수집(Automatic ingestion)은 아직 Codex CLI에서 지원되지 않습니다 — 현재 Codex CLI 릴리스 기준으로, 연결할 수 있는
SessionEnd훅(Hook) 이벤트가 없습니다. 훅 등록(Hook-registration) 코드는 이미 구현되어 있으며, Codex에서 해당 이벤트를 출시하면 별도의 변경 없이 활성화될 것입니다. 그전까지는memcp ingest-new를 수동으로 실행하거나(또는 Claude Code가 구성된 모든 소스를 스캔하므로 Claude Code와 함께 사용하면), 새로운 Codex 세션을 가져올 수 있습니다. - 다른 에이전트(Cursor, Windsurf 등)는 아직 지원되지 않습니다 — 파서(Parser) 인터페이스는 이를 위해 설계되었지만, 아직 해당 파서들이 작성되지 않았습니다.
- 의미론적/임베딩(Embedding) 기반 검색은 아직 지원되지 않습니다 — 현재는 키워드 기반의 전체 텍스트 검색(Full-text search) 방식입니다.
마무리하며
더 많은 사람들이 여러 AI 코딩 에이전트를 병행하여 사용함에 따라, "도구를 전환해도 초기화되지 않는 메모리"의 중요성은 점점 더 커질 것이라고 생각합니다. memcp는 작고 초기 단계인 프로젝트이지만, 그 목표를 실현하는 실제 작동하는 결과물입니다. 저 또한 이 프로젝트를 개발하는 데 memcp를 사용하고 있으며, 자체 개발 세션을 다시 자신의 메모리 저장소(Memory store)에 입력하고 있습니다.
피드백과 PR(Pull Request)을 환영합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기