메뉴
HN
Hacker News 17일 전

마인드워크(Mindwalk): 코드베이스 3D 지도에서 AI 코딩 에이전트 세션을 재생하는 시각화 도구

IMP
7/10
핵심 요약

마인드워크(Mindwalk)는 AI 코딩 에이전트(Claude Code, Codex 등)의 작업 세션 로그를 분석해 코드베이스 3D 지도 위에서 시각적으로 재생해 주는 오픈소스 도구입니다. 개발자는 이를 통해 에이전트가 코드의 어느 부분을 탐색하고 수정했는지, 작업 범위는 적절했는지를 직관적으로 파악할 수 있습니다. 모든 데이터는 로컬에서만 처리되어 보안성을 유지하며, 에이전트의 인지 과정을 한눈에 볼 수 있게 해주는 것이 가장 큰 특징입니다.

번역된 본문

마인드워크(Mindwalk)는 코드베이스의 3D 지도 위에서 코딩 에이전트의 세션을 재생하여 시각화해 주는 도구입니다.

문제점 세션 로그는 에이전트가 '무엇을' 했는지는 기록하지만, 에이전트가 작업을 '어떻게' 이해했는지는 알려주지 않습니다. 예를 들어, 저장소의 어느 부분을 관련 있다고 판단했는지, 행동하기 전에 어디를 탐색했는지, 에이전트의 작업 흔적이 개발자가 의도한 범위와 일치하는지 등을 알기 어렵습니다. 원시 JSONL 파일을 한 줄씩 읽는다고 해서 이러한 질문들에 대한 답을 얻을 수는 없습니다.

핵심 아이디어 저장소를 야간 지도처럼 그리고, 세션을 지도 위를 움직이는 빛의 흐름으로 재생하는 것입니다. 에이전트가 검색, 읽기, 편집을 수행한 곳은 지도상에서 빛나고(map glows) 그 외의 곳은 어둠 속에 머뭅니다. 이를 통해 에이전트가 작업을 어떻게 이해했는지를 한눈에 볼 수 있는 형태로 만들어 줍니다. 단 하나의 Go 바이너리가 Claude Code와 Codex의 세션 로그를 읽어오며, 완전히 로컬에서 동작해 세션 데이터가 사용자의 머신 밖으로 나가는 일은 없습니다.

빠른 시작 터미널에서 설치 스크립트를 실행합니다: curl -fsSL https://raw.githubusercontent.com/cosmtrek/mindwalk/master/scripts/install.sh | sh PATH를 설정합니다: export PATH="$HOME/.local/bin:$PATH" mindwalk 명령어를 실행합니다. 설치 프로그램은 체크섬(checksums.txt)을 통해 바이너리를 검증하고 ~/.local/bin에 설치합니다. (설치 경로는 INSTALL_DIR로, 특정 릴리스 버전은 VERSION으로 지정할 수 있습니다.) Windows 설치 파일은 GitHub Releases 페이지에 있습니다. 소스 코드에서 직접 빌드하려면 make setup && make build를 실행하여 bin/mindwalk를 생성하시면 됩니다.

명령어 인자 없이 실행하면, mindwalk~/.claude/projects~/.codex/sessions를 스캔하여 임의의 로컬 포트에서 UI를 띄우고 브라우저를 엽니다. 주요 명령어는 다음과 같습니다:

  • mindwalk serve [--port N] [--no-open] [--claude-dir DIR] [--codex-dir DIR]
  • mindwalk open [--no-open] <session.jsonl> : 특정 세션 하나를 엽니다.
  • mindwalk build <repo> [-o out] : 저장소의 시티맵(citymap) JSON을 작성합니다.
  • mindwalk trace <session> [-o out] : 정규화된 트레이스(trace) JSON을 작성합니다.

화면 읽는 법

  • 트리(Tree) / 지형(Terrain) 뷰: 저장소를 방사형 트리나 트리맵(treemap) 형태로 보여줍니다. 파일이 얼마나 깊고 자주 수정되었는지에 비례하여 빛이 납니다.
  • 터치 상태(Touch states): 각 파일은 가장 깊이 수행된 작업 상태를 유지합니다. 본적 있음(이끼 녹색), 읽음(달빛 흰색), 편집함(따뜻한 호박색), 미방문(어두움).
  • HUD: 오류 발생률, 잦은 변경이 일어난 파일, 마지막 검증 이후의 편집 횟수 등 마찰 신호(fri음 signals)를 검토용 스트립에 요약해 표시합니다.
  • 재생 덱(Playback deck): 세션 실행 기록의 히스토그램 위에서 세션을 스크럽(빨리 감기 등)하거나 재생합니다. 막대그래프는 차가움/따뜻함 스펙트럼을 기반으로 하여, 검색/읽기/실행 등 관찰 단계는 차갑게, 편집/검증 등 변경 단계는 따뜻하게 빛나기 때문에 편집 단계를 직관적으로 파악할 수 있습니다.
  • 타임라인 마크(Timeline marks): ◇ 문맥 압축(context compactions), ○ 하위 에이전트 실행(subagent launches), › 사용자 턴(user turns). 모든 마크를 클릭하면 해당 시점으로 즉시 이동합니다.
  • 인스펙터(Inspector): 파일을 클릭하면 해당 파일의 방문 기록을 고정하여 보여주고, 특정 방문 기록을 클릭하면 재생 바를 그 시점으로 옮깁니다.
  • 키보드 단축키: Space(재생/일시정지) · ← / →(한 단계씩 이동, ⇧ 시프트 시 10배속) · Home / End(처음/끝으로) · S(속도 조절) · E(다음 편집으로) · X(다음 오류로) · M(다음 마크로) · ⌘B(세션 레일 토글).

내부 동작 원리 의도적으로 분리된 두 가지 산출물이 사용됩니다:

  • 트레이스(Trace): 세션 로그를 파일 터치 이벤트의 순차적 스트림으로 정규화한 데이터입니다(internal/adapter, 각 에이전트 포맷별로 하나의 어댑터 사용).
  • 시티맵(Citymap): 저장소의 결정론적 레이아웃입니다(internal/citymap). 동일한 트리 구조는 항상 동일한 지도를 생성하므로 세션 간의 재생 결과를 비교할 수 있습니다. 로컬 Go 서버(internal/server)가 이 둘을 결합하여 React/Three.js 프론트엔드(web)에 제공합니다. schema/ 디렉터리는 내보내진 JSON 스키마를 정의합니다.

기여 방법 이슈와 풀 리퀘스트(PR)를 환영합니다. 개발 환경을 구축하려면 다음 명령어들을 사용하세요:

  • make setup: 프론트엔드 의존성 설치
  • make serve: 8765 포트에서 워킹 트리의 web/dist를 서빙하는 개발 서버 실행
  • make test: Go 테스트 및 프론트엔드 빌드 (PR 보내기 전에 반드시 실행)
  • make build: 임베디드 에셋 재생성 및 bin/mindwalk 빌드

기본 규칙(전체 아키텍처 노트는 AGENTS.md 참조):

  • 경계를 유지하세요: 어댑터는 렌더링을 알지 못하며, 시티맵 생성은 재생에 의존하지 않고, 서버는 단지 이 둘을 연결만 합니다.
  • Go 코드는 항상 gofmt -ed 규칙을 따르세요. 절대 internal/server/static을 수동으로 편집하지 말고 반드시 make build로 재생성하세요.
  • 트레이스나 시티맵의 JSON 형태가 변경될 경우, 동일한 변경 내역 안에서 schema/와 관련 테스트를 모두 업데이트해 주세요.
원문 보기
원문 보기 (영어)
mindwalk A visualization tool that replays coding-agent sessions on a 3D map of your codebase. The problem A session log records what an agent did, but not how it understood the task: which parts of the repo it treated as relevant, where it explored before it acted, whether its footprint matched the scope you had in mind. Reading the raw JSONL line by line doesn't answer any of that. The idea Draw the repository as a night map, and play the session back as light moving through it: where the agent searched, read, and edited, the map glows — everything else stays dark. The agent's understanding of the task becomes a shape you can see at a glance. One Go binary reads Claude Code and Codex session logs, fully local; no session data leaves your machine. Quick start curl -fsSL https://raw.githubusercontent.com/cosmtrek/mindwalk/master/scripts/install.sh | sh export PATH= " $HOME /.local/bin: $PATH " mindwalk The installer verifies the binary against checksums.txt and installs to ~/.local/bin (override with INSTALL_DIR ; pin a release with VERSION ). Windows archives are on GitHub Releases . To build from source: make setup && make build → bin/mindwalk . With no arguments, mindwalk scans ~/.claude/projects and ~/.codex/sessions , serves the UI on a random local port, and opens a browser: mindwalk serve [--port N] [--no-open] [--claude-dir DIR] [--codex-dir DIR] mindwalk open [--no-open] <session.jsonl> open one specific session mindwalk build <repo> [-o out] write the repository citymap JSON mindwalk trace <session> [-o out] write the normalized trace JSON Reading the picture Tree / Terrain views — the repo as a radial tree or a treemap plain; glow ∝ how deeply and how often a file was touched. Touch states — each file keeps its deepest touch: seen (moss green), read (moon white), edited (warm amber), unvisited (dark). The HUD folds friction signals — error rate, churned files, edits after the last verify — into a review strip. Playback deck — scrub or play the session over a bucketed histogram of the run. Bars sit on a cool/warm spectrum: observation stays cool (search, read, exec), mutation glows warm (edit, verify), so editing phases jump out at a glance. Timeline marks — ◇ context compactions, ○ subagent launches, › user turns; every mark is a click-to-jump target. Inspector — click a file to pin its visit history; click a visit row to jump the playhead to that moment. Keyboard: Space play/pause · ← / → step ( ⇧ ×10) · Home / End ends · S speed · E next edit · X next error · M next mark · ⌘B session rail. Under the hood Two artifacts, kept deliberately separate: a trace — the session log normalized into an ordered stream of file-touch events ( internal/adapter , one adapter per agent format); a citymap — a deterministic layout of the repository ( internal/citymap ); the same tree always produces the same map, so replays are comparable across sessions. A local Go server ( internal/server ) joins the two and serves the React/Three.js frontend ( web ). schema/ mirrors the exported JSON contracts. Contributing Issues and pull requests are welcome. To get a working dev setup: make setup # install frontend dependencies make serve # dev server on :8765, serving web/dist from the working tree make test # go test + frontend build — run before sending a PR make build # regenerate embedded assets and bin/mindwalk Ground rules (see AGENTS.md for the full architecture notes): Keep the boundaries: adapters don't know about rendering, citymap generation doesn't depend on playback, the server just connects the two. Keep Go code gofmt -ed; never hand-edit internal/server/static — regenerate it with make build . When trace or citymap JSON shapes change, update schema/ and the relevant tests in the same change.