sem - Git 위에 함수/클래스 단위 변경 추적을 추가하는 시맨틱 버전 관리 도구
(github.com/Ataraxy-Labs)- 줄이 아니라 코드 엔티티를 비교해 어떤 함수/메서드/클래스가 추가/수정/삭제/이동/이름 변경됐는지 보여줌
- "line x~y가 변경됨" → "함수
blah가 변경됨"
- "line x~y가 변경됨" → "함수
- 아무 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