Skip to main content

sem - Semantic Differ

·291 words·2 mins
Kostiantyn Lysenko
Author
Kostiantyn Lysenko

sem is a semantic differ — it shows what functions, structs, and modules changed instead of raw line diffs. A high-level overview of what actually happened, without reading through every changed line.

Especially useful for agentic engineering: when an AI agent makes changes across multiple files, sem diff tells you what it touched at a glance.

brew install sem-cli

Key commands: sem diff, sem blame, sem impact, sem log, sem entities, sem context.

Here is an example from my toy DNS server in Rust — sem diff HEAD~1 after a refactor that moved functions from main.rs into modules:

┌─ src/dns_message.rs ────────────────────────────────
│  ⊕ function   parse_request             [added]
│  ⊕ function   create_response_header    [added]
│  ⊕ function   build_response            [added]
└───────────────────────────────────────────────────────

┌─ src/main.rs ───────────────────────────────────────
│  ∆ function   main                      [modified]
│  ⊖ function   parse_request             [deleted]
│  ⊖ function   create_response_header    [deleted]
│  ⊖ function   build_response            [deleted]
│  ⊕ module     dns_message               [added]
│  ⊕ module     server                    [added]
└───────────────────────────────────────────────────────

Summary: 16 added, 1 modified, 8 deleted across 5 files

And sem blame src/main.rs:

┌─ src/main.rs
│  ⊕ module    dns_header               da6257ce  Kostiantyn Lysenko  2025-10-12  add: implemented DNS header parsing
│  ⊕ module    dns_message              d6ca5503  Kostiantyn Lysenko  2025-12-29  re-factor: modularize DNS server code...
│  ⊕ module    forwarder                d6ca5503  Kostiantyn Lysenko  2025-12-29  re-factor: modularize DNS server code...
│  ⊕ module    server                   d6ca5503  Kostiantyn Lysenko  2025-12-29  re-factor: modularize DNS server code...
│  ⊕ struct    Args                     20039b7b  Kostiantyn Lysenko  2025-12-06  add: inital implementation of calling...
│  ⊕ function  main                     d6ca5503  Kostiantyn Lysenko  2025-12-29  re-factor: modularize DNS server code...
└────────────────────────────────────────────────────────────

Every entity, its last commit, and why it changed — at a glance.

sem also ships with an MCP server. If you want to use it with Claude Code:

claude mcp add -s user sem -- sem mcp

https://github.com/Ataraxy-Labs/sem


comments powered by Disqus