6P by xguru | ★ favorite | 댓글 1개
  • 줄이 아니라 코드 엔티티를 비교해 어떤 함수/메서드/클래스가 추가/수정/삭제/이동/이름 변경됐는지 보여줌
    • "line x~y가 변경됨" → "함수 blah가 변경됨"
  • 아무 Git 레포에서 설정없이 동작하며, Git 외부에서도 임의의 파일 비교가 가능
  • SQLite에 저장되는 엔티티 캐시는 저장소 바깥의 OS 캐시 디렉터리에 보관돼 작업 트리를 오염시키지 않음
  • tree-sitter로 코드를 파싱하고, 엔티티 ID → AST 구조 해시 → 80% 초과 토큰 유사도 순서로 변경 전후 코드를 연결해 리네임과 이동을 감지
  • 지원 명령들

    • sem diff: 작업 트리/스테이징/커밋/커밋 범위/임의의 두 파일을 비교하며, 일반 텍스트/Markdown/JSON 출력을 지원
    • sem impact: 특정 함수 변경 시 영향을 받는 의존 코드/호출자/테스트를 찾음
    • sem blame: 함수/클래스/메소드의 엔티티 레벨 마지막 수정자를 보여줌
    • sem log: git history를 통해서 엔티티 하나가 어떻게 변화했는지를 추적해줌
      • 엔티티 지정 안하면 저장소의 hotspot(많이 변경된 것)/co-change pairs(반복적으로 동시 변경된 쌍들) 을 분석함 ("하나 건드리면, 이것도 잊지말아요")
    • sem entities: 현재 폴더 아래의 모든 엔티티 표시
    • sem context: 에이전트에 필요한 주변 코드만 토큰 예산에 맞춰 구성해줌
    • sem setup: 실행하면 기존 git diff가 엔티티 단위 출력으로 바뀌고, staged 변경의 영향 범위를 보여주는 pre-commit 훅도 설치됨
      • macOS와 Linux에서는 Claude Code에 상주 의존 그래프와 프롬프트 시작 시 컨텍스트 훅을 연결해 매번 저장소를 다시 분석하거나 코드를 찾아다니는 비용을 줄임
    • sem mcp: diff, impact, context, entities, blame, log를 MCP 도구로 제공해 코딩 에이전트가 전체 파일 대신 필요한 함수와 의존 관계만 조회하도록 함
  • GitHub Action을 추가하면 PR마다 변경된 함수/클래스/메서드를 하나의 고정 댓글로 갱신하며, 포맷/주석만 바뀐 PR도 구분함
  • TypeScript, Python, Go, Rust, Java, Swift, SQL, C/C++ 등을 포함한 32개 언어와 JSON/YAML/TOML/CSV/Markdown을 지원
    • 미지원 파일은 청크 단위 diff로 처리함
  • 라이선스: MIT OR Apache-2.0

댓글과 토론

아니 이런 게 가능했다고? 하는 생각부터 드네요. 너무 좋을거같은데 안정적이려나요...