코딩 에이전트를 위한 오픈 소스 메모리 시스템, SSH를 통해 동기화
요약
deja-vu는 코딩 에이전트의 메모리 시스템을 위한 오픈 소스 솔루션입니다. 이 도구는 과거 세션 기록 전체를 인덱싱하고, 현재 작업 중인 에이전트에게 필요한 정보를 전달하여 재디버깅이나 반복적인 질문에 대한 답변 품질을 높여줍니다. 이를 통해 개발자가 장기간의 코딩 히스토리까지 활용할 수 있게 됩니다.
핵심 포인트
- 코딩 에이전트 메모리 시스템 deja-vu 소개
- 과거 세션 기록 전체를 인덱싱하여 정보 제공
- 재디버깅 방지 및 답변 품질 향상에 기여
curl -fsSL https://raw.githubusercontent.com/vshulcz/deja-vu/main/install.sh | sh
deja install --auto
주요 특징 (Highlights)
주요 특징 (Highlights)
- 기록이 완전하다(Starts full). 설치하기 전 몇 달간의 기록도 첫날부터 검색할 수 있습니다: 기가바이트 단위로
deja "connection pool exhausted"를 검색하세요. - 하나의 메모리, 모든 에이전트(One memory, every agent). Codex에서 발견된 수정 사항이 Claude Code, Cursor 또는 opencode에 다시 나타납니다. 38개의 지원되는 하우징(supported-harnesses) 모두 동일한 인덱스를 읽습니다.
- 묻지 않아도 알 수 있다(Nobody has to ask). 리콜(Recall)은 세션 시작 시, 파일이 편집되거나 명령이 실행되기 전에, 그리고 명령이 실패한 후에 도착합니다.
- 압축을 견딘다(Survives compaction). 43회 측정된 압축 과정 동안 요약본은 결정의 77%와 명령어의 0.2%를 유지했습니다. deja는 나머지(how)도 전달합니다.
- 대화뿐 아니라 작업까지 인덱싱한다(Indexes the work, not just the talk). 매 턴 열린 파일들, 종료 상태가 포함된 명령어들, 편집이 대체한 정확한 범위들을 기록합니다.
- 무엇을 유지했는지 안다(Knows what held).
deja promote <id> --state rejected는 되돌려진 결정을 표시하며, 이후의 모든 검색은 그것이 시도되었고 왜 폐기되었는지 알려줍니다.--state accepted를 사용하면 이 표식을 다시 취소할 수 있습니다. - 바닥이 움직였을 때 말한다(Says when the ground moved). 검색 결과는 이번 세션 동안 건드린 4개의 파일이 변경되었다고 보고하며, 알 수 없을 때는 조용히 침묵합니다.
- 로컬이며 사적이다(Local and private). 모델도, 임베딩도, 서버도 없습니다. 인덱스가 구축될 때 키와 토큰은 제거됩니다(privacy).
- 함께 움직인다(Moves with you). 기기 간에
deja sync ssh laptop을 사용하며, 그 사이에 클라우드는 없습니다. 다른 에이전트에서 계속하려면deja handoff --to codex를 사용합니다. - 하나의 Go 바이너리(One Go binary). macOS, Linux 및 Windows에서 Homebrew, Scoop, winget, npm 또는
go install을 통해 사용할 수 있습니다.
사용자 자신의 작업에 포장하기 (Your own work, wrapped)
deja stats --card를 사용하면 터미널에 이를 그릴 수 있으며, 파일 이름을 지정하면 프로필 README용 SVG 파일을 작성해 줍니다. 다른 곳에 게시하려면 PNG로 변환하세요—이 페이지가 사용자 자신의 브라우저에서 변환합니다.
전체 기능 참고 자료는 docs에서 확인할 수 있습니다.
설치 (Install)
상단의 두 명령어는 macOS와 Linux에서의 전체 설치 방법입니다:
curl -fsSL https://raw.githubusercontent.com/vshulcz/deja-vu/main/install.sh | sh
deja install --auto
설치에 10초, 인덱싱에 약 10초면 충분하며 유용합니다. 두 번째 명령어는 MCP 리콜(recall)을 찾은 모든 에이전트에 연결하고, 에이전트가 지원하는 경우 세션 시작 시 리콜 기능을 활성화하며, 다음 세션에서 비용을 지불하지 않도록 첫 인덱스를 구축합니다.
새로운 에이전트 세션을 시작하고 몇 달 전에 작업했던 내용을 물어보세요:
jwt 리프레시 로테이션(refresh rotation) 처리를 해본 적이 있나요? 메모리를 확인해 보세요.
반드시 질문할 필요는 없습니다. auto-recall 기능 덕분에 에이전트가 세션이 열릴 때 해당 프로젝트에서 무엇을 해결했는지 이미 알고 있습니다.
<details> <summary>다른 설치 방법 및 모든 기능을 사용하지 않을 경우의 조치</summary>brew install deja-vu, go install github.com/vshulcz/deja-vu/cmd/deja@latest, 또는 아무것도 설치하지 않고 시도하려면 npx @vshulcz/deja-vu "query"를 사용할 수 있습니다. MCP 서버를 번들로 사용하는 데스크톱 앱은 최신 릴리스에서 .mcpb 파일을 열 수 있으며, 이 파일에는 바이너리가 포함되어 있습니다.
Claude Code, Cursor, Qwen 및 OpenClaw는 자체 마켓플레이스에서 동일한 플러그인 번들을 가져올 수 있습니다 (Codex는 자체 패키지를 가진 Harnesses 테이블에 자체 번들이 있습니다). Copilot CLI도 설치할 수 있지만 스킬만 사용하므로, 그곳에서는 deja install copilot-auto를 사용하세요:
claude plugin marketplace add vshulcz/deja-vu && claude plugin install deja-vu@deja-vu
Windows에서는 설치 스크립트가 'unsupported OS' 오류와 함께 종료됩니다. 이 스크립트는 셸(shell) 스크립트이기 때문입니다. 대신, 기본적으로 모든 Scoop 설치에 포함된 Scoop이나 Windows에 제공되는 winget을 사용하세요:
scoop install deja-vu
winget install vshulcz.deja-vu
또는 최신 릴리스에서 deja-vu_<버전>_windows_amd64.zip 파일을 다운로드하여, deja.exe를 %USERPROFILE%\.localin과 같은 PATH에 넣어주세요.
바이너리 자체만으로도 검색을 위한 완벽한 설치가 됩니다: index, search, show, ctx, blame, --json 기능은 다른 것이 필요 없습니다. deja install은 MCP를 에이전트에 연결하고 세션 시작 시 리콜(recall) 기능을 활성화하는 역할을 합니다. 이 기능은 유용하며 선택 사항입니다. 바이너리만 사용하는 설정에서는 deja doctor가 모든 MCP 타겟을 'not-wired'로 보고하는데, 이는 해당 설정이 의도대로 작동하고 있다는 의미입니다. 또한 deja warmup은 에이전트에게 CLI 계약(CLI contract)을 가르치는 파일(~/.agents/skills/deja-search/SKILL.md)을 남겨둡니다. 이 파일 덕분에 에이전트는 MCP 없이도 기록(history)이 검색 가능하다는 것을 알게 됩니다. 저장소에 있는 사본은 skills/deja-search/SKILL.md입니다.
deja install --all은 세션 시작 시 리콜 기능만 제외한 --auto와 같습니다: 에이전트가 호출하기로 결정할 때 메모리에서 답변을 얻고, 매번 세션을 시작하며 답변을 받는 것이 아닙니다. 에이전트 설정 가이드에는 각 하네스(harness)가 지원하는 내용, aider의 읽기 전용 컨텍스트 파일, 그리고 Windows의 cmd /c deja mcp 래퍼에 대해 설명되어 있습니다.
설치(Install)는 또한 감지된 하네스(harnesses) 각각에 대해 사용자 수준의 가이드라인을 작성합니다: Claude Code, Codex, opencode, Gemini CLI, Antigravity, Qwen, Kimi Code, pi, Senpi, Copilot, VS Code Copilot Chat, Cursor, Goose, OpenClaw, Hermes, Roo Code, omp, Amp, prime-agent, DeepSeek Harness, Continue, Crush, CodeBuddy Code, WorkBuddy, Zed, TRAE CLI, TRAE IDE 및 Muse Code는 각각 자체 가이드 파일(또는 설정된 XDG_CONFIG_HOME 아래)에 이를 받습니다. 주변 사용자 콘텐츠를 변경하지 않고 deja의 스킬을 재작성하거나 표시된 블록을 다시 실행하려면 다음 명령어를 사용합니다: deja install --all --no-guidance. Grok Build는 공유 스킬을 ~/.agents/skills에서 가져오며, 이 경로가 읽는 곳입니다. 그 옆에 작성되는 ~/.grok/GROK.md 파일은 해당 디렉터리를 공유하는 관련 없는 커뮤니티 CLI를 위한 것입니다. Cursor는 사용자 수준의 지침 파일이 없기 때문에, 네 군데 중 한 곳인 ~/.agents/skills에서 공유 스킬을 가져옵니다. 이는 매 세션마다 읽히기보다는 무언가 관련성이 있어 보이는 경우에만 읽힙니다. Kilo Code, gajae-code, Command Code, Cherry Studio 및 Reasonix는 자체 설치 대상에서 스킬과 스테어링 파일(steering file)을 받습니다.
개인 정보 보호 (Privacy)
인덱싱 및 검색은 로컬로 이루어집니다. 네트워크는 deja update, deja sync ssh, deja doctor의 버전 확인, 그리고 구성하는 엔드포인트에 대한 deja embed에서만 사용됩니다.
인덱스가 구축되는 과정에서 자격 증명(Credentials)은 제거됩니다: 클라우드 및 제공업체 키, 토큰 및 JWT, PEM 블록, URL에 포함된 비밀번호 또는 산문으로 기술된 비밀번호. 각각은 [redacted:<종류>]로 처리되며 주변 텍스트는 검색 가능하게 유지됩니다. 원본 기록(source transcripts)에는 여전히 이들이 남아 있습니다(한 기계가 42개 세션 동안 84개를 가졌던 경우): deja secrets는 값을 출력하지 않고 해당 세션을 이름으로 지정하며, deja secrets --scrub은 가능한 것들을 재작성하여 원본을 파일 옆에 유지합니다.
deja forget은 세션을 삭제하며, 재구축(rebuilds)을 거쳐도 삭제된 상태를 유지합니다. ~/.config/deja/exclude는 줄 단위로 프로젝트를 건너뛰거나, harness:opencode와 같이 전체 스토어를 건너뛸 수 있습니다. 보안 모델에는 데이터 흐름과 마스킹(redaction)이 포착할 수 없는 내용들이 나와 있습니다.
CLI
$ deja "jwt refresh token"
[claude] api · Jul 8 · 8f31c0a9 — 2 matches
login started failing after refresh token rotation; jwt kid mismatch in tests
...
기록 검색하기 (Ask your history)
| 명령어 | 기능 |
|---|---|
deja <쿼리> | 모든 기록을 검색합니다. 여러 단어는 AND 연산이며, 따옴표로 묶인 구문은 연속적인 텍스트를 필요로 합니다. 정확히 일치하는 매치가 없는 쿼리는 단어 형태와 유사한 철자를 시도하는데, 이때 부분 문자열이 단어로 인식되는 경우가 있습니다 (code가 opencode를 찾는 경우). |
| ... |
찾은 내용 사용하기 (Use what it finds)
| 명령어 | 기능 |
|---|---|
deja ctx <쿼리> | 프롬프트로 파이프(pipe)할 준비가 된, 가장 적합한 매치에 대한 Markdown 요약본입니다. |
| ... | |
| 이동하고 확인하기 (Move it and check it) |
| 명령어 | 기능 |
|---|---|
deja sync export/import/ssh | 기기 간 메모리를 이동시킵니다. 워터마크가 찍히고, 추가 전용(append-only)이며, 반복 실행해도 동일한 결과를 보장합니다 (idempotent). |
| ... |
MCP 도구
AI 자동 생성 콘텐츠
본 콘텐츠는 HN Show HN (AI)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기