# sem - Git 위에 함수/클래스 단위 변경 추적을 추가하는 시맨틱 버전 관리 도구

> Clean Markdown view of GeekNews topic #31339. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=31339](https://news.hada.io/topic?id=31339)
- GeekNews Markdown: [https://news.hada.io/topic/31339.md](https://news.hada.io/topic/31339.md)
- Type: news
- Author: [xguru](https://news.hada.io/@xguru)
- Published: 2026-07-12T09:31:02+09:00
- Updated: 2026-07-12T09:31:02+09:00
- Original source: [github.com/Ataraxy-Labs](https://github.com/Ataraxy-Labs/sem)
- Points: 3
- Comments: 0

## Topic Body

- **줄이 아니라 코드 엔티티를 비교**해 어떤 함수/메서드/클래스가 추가/수정/삭제/이동/이름 변경됐는지 보여줌  
  - "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

## Comments



_No public comments on this page._
