커밋 한 모금
AI 에이전트개발 도구

ai-memory: 에이전트끼리 기억을 잇는 AI 코딩 장기 기억 오픈소스, 받아서 돌려 봤다

2026년 10월 19일 · 읽는 데 9분
한 줄 요약AI 코딩 에이전트끼리 작업 기록을 나눠 갖게 해 주는 Rust 기반 오픈소스 ai-memory를 받아 봤습니다. 설치도 인터넷도 없는 환경이라 의존성이 없는 shell 훅 레이어만 실험했습니다. 서버 바이너리 실행, MCP, 검색, 기억 통합(consolidation)은 확인하지 못했습니다.

무엇인가

ai-memory는 AI 코딩 에이전트용 장기 기억 도구입니다. Claude Code를 쓰다 중간에 끄고 같은 디렉토리에서 OpenAI Codex를 열어도, 아키텍처나 실패한 접근, 아직 남은 질문을 다시 설명할 필요 없이 이어서 작업할 수 있게 해 줍니다. Rust 바이너리 하나에 MCP 서버와 라이프사이클 훅이 함께 들어 있습니다(MIT 라이선스, GitHub star 10,407 / fork 747, 2026-05-21 생성 — 2026-10-19 기준).

README는 전체 흐름을 네 단계로 설명합니다.

capture ──▶ consolidate ──▶ recall ──▶ handoff
 hooks        session-end      search     next agent,
 observe      summaries as     + brief    any harness
 silently     wiki pages       injection
  • capture: 에이전트 라이프사이클 훅이 세션 중에 일어나는 일(prompt, 툴 호출, 세션 경계)을 조용히 기록합니다. 저장하기 전에는 타입으로 정의된 프라이버시 경계에서 크기와 secret을 기준으로 세니타이즈합니다.
  • consolidate: 세션이 끝나면 기록을 읽기 쉬운 markdown 페이지로 정리합니다. 원본 데이터는 git 기반 위키(일반 .md 파일)이고, SQLite 데이터베이스는 이 파일들로 언제든 다시 만들 수 있는 파생 인덱스일 뿐입니다.
  • recall: 다음 세션에서는 어느 에이전트를 쓰든 분량이 제한된 브리핑을 주입받습니다. 검색은 전체 텍스트(FTS5), 엔티티, 링크 결과를 하나의 랭킹으로 합쳐서 보여 줍니다.
  • handoff: 에이전트 사이의 인계는 타입이 정의된 프로토콜로 명시적으로 이뤄집니다. 인계 건마다 소유자가 있고, 접수는 딱 한 번만 됩니다.

README가 내세우는 특징은 이렇습니다. 20개 이상의 harness(Claude Code, Codex, Cursor, Gemini CLI, Grok, Kimi, Kiro 등)가 기억 하나를 같이 씁니다. 기본 경로에서는 LLM을 전혀 호출하지 않아서, API 키가 없어도 캡처·검색·handoff·감쇠(decay)가 돌아갑니다. LLM 통합, 벡터 검색, "dream" 재작성 같은 기능은 모두 opt-in이고 기본값은 꺼짐입니다. 기억은 사용자가 직접 띄운 서버(같은 노트북이든 homelab 박스든 다른 어디든)에 저장되므로, 기기나 프로젝트, 사람이 바뀌어도 따라옵니다. 쓰기 성능은 초당 700회 정도로 측정됐고, purge 명령은 "삭제"가 정확히 무엇을 지우는지 밝혀 둔다고 합니다.

README에 나온 설치 명령은 두 줄입니다.

curl -fsSL https://github.com/akitaonrails/ai-memory/releases/latest/download/install.sh | sh
ai-memory setup

install.sh는 OS/CPU에 맞는 릴리스를 받아 공개된 SHA-256으로 검증하고(값이 다르면 설치하지 않습니다), ~/.local/bin/ai-memory에 링크를 겁니다. ai-memory setup은 데이터 디렉토리를 만들고 bearer 토큰을 owner-only 파일에 저장한 다음, 사용자 단위 systemd/launchd 서비스를 띄웁니다. 그리고 찾아낸 에이전트마다 MCP, 훅, Agent Skills를 연결합니다.

직접 해 본 것

저장소는 받았지만 설치는 하지 않았습니다. 실험 환경은 인터넷이 막힌 로컬망 전용이었고, cargo/rustc도 없어서 Rust 서버 바이너리는 빌드도 실행도 할 수 없었습니다. 그래서 의존성이 없는 shell 훅 레이어만 돌렸습니다.

먼저 훅 테스트 스위트를 셸마다 돌려 봤습니다.

/bin/sh tests/hooks/test_lib.sh
/bin/dash tests/hooks/test_lib.sh
bash tests/hooks/test_lib.sh
zsh tests/hooks/test_lib.sh
  • macOS 기본 /bin/sh(bash 3.2): 211 passed, 8 failed. 실패한 8개는 모두 $(...) 명령 치환 안에 여러 줄짜리 case가 들어 있어서 bash 3.2가 구문을 제대로 읽지 못한 경우였습니다(출력: syntax error near unexpected token 'newline'). 훅 로직이 틀린 게 아니라 제 셸 버전 문제입니다.
  • /bin/dash: 219 passed, 0 failed. CI가 쓰는 POSIX shell 기준으로는 훅 스크립트 자체에 문제가 없습니다.
  • bash: 211 passed, 8 failed (원인은 위와 같은 bash 3.2 문제).
  • zsh: aliases: attempt to set slice of associative array를 내고 멈췄습니다(테스트가 bash/dash 계열을 전제로 짜여 있습니다).

설치 스크립트 테스트도 돌렸습니다.

bash tests/install_sh.sh

결과는 통과였습니다("install.sh checks passed"). symlink/hardlink 거부와 sha256 검증을 file:// URL로 확인하는 테스트라 네트워크가 없어도 됩니다.

훅과 서버를 잇는 E2E도 한 번 해 봤습니다. python3 표준 라이브러리만으로 HTTP 스텁 서버를 짜서 localhost에 띄우고 훅을 붙였습니다. 스텁의 응답 코드에 버그가 있어서 1회차 실행에서는 POST가 500을 받았고, 그 덕에 훅이 데이터를 spool에 쌓는 데까지 지켜볼 수 있었습니다. spooldata/hook-spool/*.json 파일 2개를 열어 보니, URL 필드에 .ai-memory.toml 마커에서 읽어 낸 workspace/project 값과 ingest_key가 실제로 붙어 있었습니다. 훅은 stdout으로 {}를 돌려줬고 클라이언트 로그도 깨끗했습니다. 버그를 고친 뒤 새 디렉토리에서 다시 돌리려 했지만, 스텁 프로세스가 120초 자동 종료 설정 때문에 이미 내려가 있어서 2회째 실험은 못 했습니다. 유효한 결과는 1회 실행분뿐입니다.

확인하지 못한 것도 적어 둡니다.

  • Rust 서버(serve) 실행: cargo가 없고 인터넷도 막혀 있었습니다.
  • MCP 도구 호출, 검색, consolidation: 서버 바이너리가 없으면 해 볼 수 없습니다.
  • install.sh가 릴리스 자산을 내려받는 경로: 인터넷이 막혀 있어서 오프라인 file:// 분기만 확인했습니다.

이 맥에서 쓸 수 있나

이 글을 쓴 환경은 Mac Studio(M5 Max, 메모리 48GB)이고, 로컬 AI 모델 서버가 메모리를 늘 34GB쯤 쓰고 있습니다. 위 실험 결과와 README, 라이선스만 보고 판단하면 다음과 같습니다.

  • zero-LLM 모드만 쓸 때: LLM 제공사 API에 기대는 부분이 없습니다. 서버를 직접 localhost에 띄우면 세션 기록이 어디에 저장되는지 우리가 정할 수 있으니, 이 환경에서 쓰기에 부담이 적습니다.
  • LLM 기능(consolidation, dream, 임베딩)을 켤 때: Anthropic/OpenAI/Gemini 같은 외부 제공사 API로 세션 요약 텍스트가 나가게 됩니다. 이 맥은 모델 서버가 이미 34GB를 쓰고 있어서, LLM 통합을 켜면 메모리 부담과 비용 부담이 함께 생깁니다. 기본값이 꺼짐이라 켜지 않으면 신경 쓸 일은 없습니다.
  • 메모리: 서버는 SQLite, 스윕, git 커밋을 돌리는 데몬입니다. 모델 서버가 약 34GB를 차지한 상태에서 이 데몬이 메모리를 얼마나 더 쓰는지는 재 보지 못했습니다.

이런 분께

  • Claude Code, Codex, Cursor처럼 여러 AI 코딩 에이전트를 번갈아 쓰면서 "이 프로젝트는 왜 이렇게 했고, 뭐가 아직 남았는지"를 매번 다시 설명하기 귀찮은 분.
  • 기억을 git 기반 markdown 위키(일반 .md 파일)로 두고 grep으로 찾거나 Obsidian으로 열거나 직접 고치고 싶은 분.
  • 평소에는 LLM 없이(데이터는 내 서버에) 돌리다가 필요할 때만 LLM 통합을 켜는 "선택형" 구조를 원하는 분.
  • 팀이 서버 하나를 같이 쓰면서 세션에서 배운 내용을 모든 팀원의 에이전트가 검색하게 하고 싶은 분.

주의할 점

  • 프롬프트 인젝션: 훅이 모은 세션 기록과 기억은 "믿을 수 없는 과거 데이터"로 다뤄야 합니다. 이 도구의 내부 문서도 검색으로 가져온 기억을 명령으로 쓰지 말라고 적어 두었습니다. 세니타이즈는 크기와 secret 경계만 처리하고, README도 "저장된 문구를 신뢰할 수 있게 만들 수는 없다(Sanitization... cannot make stored prose trusted)"고 밝힙니다. 위키 페이지를 에이전트 문맥에 넣는 구조라, 악성 콘텐츠가 한 번 들어오면 기억에 계속 남을 수 있습니다.
  • 데이터가 나가는 경로: 훅은 세션 기록을 HTTP POST로 서버에 보냅니다. 서버를 직접 localhost에 띄우면 통제할 수 있지만, 실제 클라이언트(클로드/커서 등)에 훅을 붙이는 순간부터 모든 세션 기록이 그 서버로 갑니다. 서버 포트, 인증(4단계 인증은 저장소의 docs/users.md에 정리돼 있습니다), 백업 반출 정책부터 정해 두는 게 좋습니다.
  • LLM 기능을 켜면 세션 요약 텍스트가 제3자 API로 나갑니다. 개인 데이터가 담긴 세션을 LLM 통합에 넘기면 제공사 이용 약관 문제가 생깁니다.
  • bash 3.2 호환성: 이 실험 환경에서 POSIX 테스트 스위트가 8건 실패했고, 원인은 bash 3.2 구문 문제였습니다(CI 기준으로는 통과). 훅이 bash 3.2에서 깨질 수 있다는 신호입니다. 이 머신에서 bash 3.2로 훅을 실행하는 클라이언트라면 마커 해석이 실패할 수 있습니다. 실제 클라이언트로는 테스트하지 못했습니다.

출처

  • GitHub 저장소: https://github.com/akitaonrails/ai-memory (owner: akitaonrails, MIT, Rust, star 10,407 / fork 747, 2026-05-21 생성)
  • 웹사이트: https://aimemory.sh
  • 확인 시각: 2026-10-19 06:20 KST

설치·실행 결과는 글쓴이 환경(맥, 인터넷 차단 시험 등) 기준이며 여러분 환경에서는 다를 수 있습니다.