Skip to main content

Decision memory for AI coding agents — semantic search across Claude Code, Gemini CLI, and Codex CLI conversations

Project description

WWT — 모든 AI 에이전트를 위한 하나의 뇌

에이전트들이 하나의 뇌를 공유합니다. 같은 설명을 반복하거나 .md 파일 무한 생성을 멈추세요.

PyPI version License: Apache-2.0 Python 3.10+

지원 에이전트: Claude Code · Gemini CLI · Codex CLI English README


WWT는 무엇을 하는가

코딩 에이전트 셋. 로그 포맷 셋. 세션이 끝나면 사라지는 메모리 셋. WWT는 이 셋을 모든 에이전트가 읽을 수 있는 하나의 검색 가능한 뇌로 합칩니다.

Claude Code ─┐
Gemini CLI  ─┼──→  로컬 인덱스 1개  ──→  어떤 에이전트도 회수 가능
Codex CLI   ─┘

같은 컨텍스트를 다시 설명할 필요 없습니다. CLAUDE.md 묘지도 필요 없습니다. "잠깐, 얘가 왜 이렇게 했지?" 같은 순간도 없습니다. 그그그그 뭐였지?!를 해결하는 MCP

빠른 시작

pip install whatwasthat              # 또는: uv tool install whatwasthat
wwt setup                            # 설치된 모든 에이전트의 DB + Hook + MCP 한 번에

끝입니다. 기존 로그는 자동으로 적재되고, 이후 세션은 종료 시 자동 캡처됩니다.

동작 원리

세션이 끝나면 에이전트의 Hook이 발동됩니다. WWT는 로그를 파싱하고, 코드를 추출하고, 대화를 세 가지 덩어리 크기로 동시에 쪼개고, 검색용 텍스트를 로컬에서 임베딩한 뒤(API 호출 없음) ChromaDB에 저장하고, 전체 원문은 SQLite에 보존합니다.

"전에 그거 어떻게 했었지?" 라고 물으면 — 어떤 에이전트든 MCP를 통해 search_memory를 호출합니다. WWT는 검색하고, 질문 의도에 맞춰 한 번 더 순위를 조정한 뒤, 간결한 미리보기를 반환하고, 필요한 덩어리만 recall_chunk로 원문 확장합니다. 무엇을 했는지뿐 아니라, 그렇게 했는지까지 포함해서.

세션 종료 → Hook → 파싱 → 쪼개기(3가지 크기) → 임베딩 → ChromaDB + 원문 SQLite
질문         → MCP  → 검색 → 순위 재조정 → 미리보기 → 필요 시 원문 회수

세 가지 크기로 쪼개서 찾기 (v1.1)

같은 대화를 세 가지 덩어리 크기로 동시에 색인합니다. 질문에 맞는 크기가 자연스럽게 위로 올라오도록.

덩어리 크기 범위 잘 맞는 질문
짧은 조각 2턴 "그때 에러 뭐였지?" 같은 사실 회수
중간 조각 2~6턴 (겹치며 이동) "왜 X를 골랐지?" 같은 결정 맥락
세션 요약 대화 전체 (턴당 앞부분만) "그날 뭐 했지?" 같은 개요

검색 결과 한 번 더 추려내기 (v1.1)

1차로 의미 유사도 + 키워드 매칭으로 후보를 뽑고, 질문 의도에 맞춰 순위를 재조정합니다 (추가 AI 호출 없음):

  • 질문 유형에 맞는 덩어리가 먼저 — "왜" 질문엔 중간 조각, 코드 질문엔 짧은 조각, 개요 질문엔 세션 요약.
  • 정확히 겹치는 단어에 가점.
  • 서로 겹치는 중복 결과엔 감점.

v1.1 업그레이드

v1.1은 세 가지 덩어리 크기 인덱싱과 검색 순위 재조정을 추가합니다. 저장 구조가 바뀌었으므로 업그레이드 후 한 번 재적재하세요:

wwt reset --force
wwt setup

v1.0.x에서 올라오는 경우에도 이 재적재로 v1.0.12 원문 보존 구조까지 함께 반영됩니다.

왜 하나의 뇌가 중요한가

WWT 없이 WWT와 함께
매 세션마다 에이전트가 망각 모든 에이전트에 걸친 영구 기억
매 세션마다 컨텍스트를 다시 설명 에이전트가 를 자동으로 회수
.md 파일이 읽히지 않은 채 쌓임 대화 자체가 진실의 원천
Claude는 Gemini가 어제 한 일을 못 봄 어떤 에이전트도 다른 에이전트의 기록을 읽음

검색 모드

MCP 도구 에이전트가 호출하는 시점
search_memory "전에 Redis 어떻게 설정했었지?"
search_decision "왜 Memcached 대신 Redis였지?"
search_all 크로스 프로젝트, 크로스 에이전트 회수
recall_chunk 검색 결과의 chunk_id로 전체 원문과 코드 스니펫 조회

search_memory자동 라우팅됩니다 — 프로젝트 필터가 충분한 결과를 못 내면, 자동으로 전체 프로젝트로 확장합니다 (Self-ROUTE, EMNLP 2024). 한 번의 호출, 재시도 없음.

wwt를 사용하는 세 가지 방식

1. 크로스 플랫폼Claude가 어제 Codex가 한 일을 읽기

사용자 (Claude Code에서):  "어젯밤에 JWT refresh token 어떻게 설정했지?"
WWT:                      [codex-cli] backend-api @ 2026-04-07 23:40 에서 발견
                          → Claude가 원본 Codex 대화를 읽고 답변.

2. 크로스 프로젝트다른 프로젝트의 해결책 재사용

사용자 (frontend 프로젝트에서):  "다른 프로젝트에서 mTLS cert chain 어떻게 풀었더라?"
WWT:                            [claude-code] infra-gateway (main) @ 2026-03-22 에서 발견
                                → 같은 해결책, 다른 레포. 몇 초 만에 회수.

3. 둘 다 동시에크로스 플랫폼 AND 크로스 프로젝트

사용자 (ml-pipeline 프로젝트, Gemini CLI):  "지난달에 왜 Kafka 빼고 NATS로 갔지?"
WWT search_decision:                       [claude-code] data-platform @ 2026-03-15 에서 발견
                                           → Claude가 다른 프로젝트에서 내린 결정을,
                                             이제 이 프로젝트의 Gemini에서 답변 가능.

자주 쓰는 기억일수록 오래 남는다

시험공부에서 여러 번 꺼내본 내용이 오래 남는 것과 같은 원리입니다. WWT는 실제로 원문을 다시 펼쳐본 대화(recall_chunk로 확장한 것)를 더 천천히 잊습니다. 검색 미리보기만 훑은 건 "봤다"로 치지 않습니다 — 지나가는 검색까지 강화로 치면 잡음만 쌓이기 때문입니다.

검색 경로는 완전 읽기 전용이라, 여러 에이전트가 동시에 같은 DB를 검색해도 충돌이 없습니다.

최종 점수는 세 신호의 조합입니다:

최종 점수 = 의미 유사도 × (최근 사용 + 중요도)

오래된 핵심 결정이 최근 잡담을 이깁니다. 기억은 원래 그렇게 작동해야 합니다.

설치

pip install whatwasthat              # pip
uv tool install whatwasthat          # uv (권장)

그 다음 wwt setup 한 번. 머신에 이미 설치된 모든 에이전트(Claude Code, Gemini CLI, Codex CLI)에 MCP 서버를 등록하고 자동 캡처 Hook을 설치합니다. 여러 번 실행해도 안전합니다.

요구사항

  • Python 3.10+
  • OS macOS, Linux (Windows 미테스트)
  • 디스크 ~200MB 설치 + ~470MB 임베딩 모델
  • 네트워크 모델 다운로드 후 100% 로컬. API 키 없음. 텔레메트리 없음.

문서

기여

uv run pytest tests/ -v
uv run ruff check src/

라이선스

Apache License 2.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

whatwasthat-1.2.0.tar.gz (67.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

whatwasthat-1.2.0-py3-none-any.whl (49.9 kB view details)

Uploaded Python 3

File details

Details for the file whatwasthat-1.2.0.tar.gz.

File metadata

  • Download URL: whatwasthat-1.2.0.tar.gz
  • Upload date:
  • Size: 67.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for whatwasthat-1.2.0.tar.gz
Algorithm Hash digest
SHA256 9703897310dd1bf16919fa2d665927f2faf203f691c0aab0d1825c04fe64629d
MD5 ac767acfe3ec480a85cdb677dd5b7804
BLAKE2b-256 9e37a0f0be2c074361a2f78af062054ddb741cc579fa0beba38ff7209148b8f1

See more details on using hashes here.

Provenance

The following attestation bundles were made for whatwasthat-1.2.0.tar.gz:

Publisher: publish.yml on Hyuk0816/whatwasthat

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file whatwasthat-1.2.0-py3-none-any.whl.

File metadata

  • Download URL: whatwasthat-1.2.0-py3-none-any.whl
  • Upload date:
  • Size: 49.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for whatwasthat-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ab6bca3f9391fa681e92762ddab7c73a91bed70f8df8dbe4994a95f258fac026
MD5 61afcf373f5a86bdf26f90d52a98dffa
BLAKE2b-256 0ba2720c7c546b816c27d3531fd5b8dc714596296ca840afa8f4d1f81348b2fc

See more details on using hashes here.

Provenance

The following attestation bundles were made for whatwasthat-1.2.0-py3-none-any.whl:

Publisher: publish.yml on Hyuk0816/whatwasthat

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page