brain-web
Brain(뉴런·시냅스)·Memory(의미검색)·작업 히스토리를 로컬 웹에서 시각적으로 본다. 기억 노드를 force-directed 그래프로 그려 유기성(연결)을 보여주고, 노드 클릭 시 내용·태그·감정가중치를 패널에 표시하며, type별 필터·검색·타임라인을 제공한다. "기억 시각화", "brain 그래프 보여줘", "내 기억 어떻게 연결됐어" 등에서
SKILL.md.claude/skills/brain-web/SKILL.md
GitHubbrain-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)가 없어 곡선에서 제외(뉴런만).
- retention =
동작 원리 메모
- 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>