brain-web

Brain(뉴런·시냅스)·Memory(의미검색)·작업 히스토리를 로컬 웹에서 시각적으로 본다. 기억 노드를 force-directed 그래프로 그려 유기성(연결)을 보여주고, 노드 클릭 시 내용·태그·감정가중치를 패널에 표시하며, type별 필터·검색·타임라인을 제공한다. "기억 시각화", "brain 그래프 보여줘", "내 기억 어떻게 연결됐어" 등에서

SKILL.md

GitHub

brain-web — 기억 시각화 로컬 웹

Brain/Memory에 쌓인 기억과 그 **유기성(연결 그래프)**을 브라우저에서 본다. 빌드 도구 없음. 셸이 데이터를 스캔해 JSON 1장을 만들고, 단일 HTML이 그린다.

실행

bash ~/.claude/skills/brain-web/serve.sh        # 스캔 → 서버 → 브라우저 자동 오픈 (포트 8077)
bash ~/.claude/skills/brain-web/serve.sh 9000   # 포트 지정

데이터만 새로 만들고 싶으면:

python3 ~/.claude/skills/brain-web/scan.py

구성 (3파일, 의존성 0)

파일 역할
scan.py ~/.claude/brain/(뉴런·시냅스), ~/.claude/projects/*/memory/(의미검색)를 훑어 data.json 생성. 표준 라이브러리만.
index.html vis-network(CDN) 기반 3탭 SPA. 의존성은 CDN 1개뿐.
serve.sh 스캔 → python -m http.server(127.0.0.1 only) → 브라우저 오픈.

프로젝트 필터 (상단 선택바)

헤더 우측 드롭다운에서 프로젝트를 고르면 모든 탭이 그 프로젝트로 필터링된다(전체/프로젝트별 토글).

  • memory 노드는 project 경로 → 읽는 이름. 뉴런 노드는 tags에서 프로젝트명 추출(알려진 프로젝트 매칭 + project 태그 다음 토큰).
  • 프로젝트 미지정(전역 기억)은 "전체"에서만 보인다.

4개 탭

  • 🕸 그래프 — force-directed로 노드(🔵뉴런 dot·🟠기억 diamond, 크기=감정가중치)와 엣지(시냅스·기억링크 [[ ]]·뉴런 links). 시냅스 흐름 애니메이션. 노드 클릭→우측 패널. 범례 클릭으로 종류/엣지 토글. 검색. 타임라인은 이 탭 우측 패널 영역.
  • 📋 목록 — 기억을 카드로. 분류 칩 + 검색. 카드 클릭→모달 팝업(내용·태그·본문·📂위치 버튼, ESC/배경 닫기).
  • 📊 대시보드 — 카운트업 숫자, 종류별/프로젝트별 막대(애니메이션), 태그 클라우드(Top 30).
  • 🧠 망각곡선 — 에빙하우스 곡선. 각 기억을 (경과일, 보존율) 점으로 산포 + 이상적 망각곡선 가이드라인. 곧 잊힐 기억(R<0.3)·생생한 기억(R>0.7) Top 15. 점/행 클릭→모달.
    • retention = exp(-경과일 / S), S(강도) = 2 + access_count×3 + emotional_weight×5. scan.py가 스캔 시점 기준 계산.
    • memory 노드는 시간 데이터(last_accessed)가 없어 곡선에서 제외(뉴런만).

동작 원리 메모

  • Brain 데이터는 평문 md/json(암호화 아님)이라 직접 파싱한다.
  • 프로젝트 경로(-Users-ws-…)는 읽는 이름으로 변환, 전체 경로는 📂위치 버튼으로 확인.
  • dangling 엣지(노드 없는 연결)는 scan.py가 제거. XSS 방어: 모든 출력 esc()/클로저 처리.
  • 노드 300개 미만이면 물리 시뮬, 이상이면 원형 고정 배치(브라우저 보호).
  • file://로 직접 열면 CORS로 막히니 반드시 http 서버로(serve.sh가 처리). 서버는 127.0.0.1에만 바인딩(개인 기억 보호).

한계 (정직하게)

  • memory·brain 그래프는 별개 군집 (서로 잇는 엣지 규칙 없음). 교차 연결은 다음 단계.
  • 타임라인은 별도 탭이 아님 — 그래프 탭 우측에만, Brain 프로젝트 md의 "마지막 업데이트"만 읽는다.
  • vis-network를 CDN에서 로드 → 오프라인이면 그래프 탭이 빈다(목록·대시보드는 동작).
  • scan.py는 표준 라이브러리 YAML 얕은 파서 — 복잡한 YAML(앵커·멀티라인 블록스칼라)은 미지원.</content>